55using System . IO ;
66using System . Linq ;
77using System . Text ;
8+ using System . Threading . Tasks ;
89
910namespace Nest
1011{
11- public partial class ElasticClient
12+ public partial class ElasticClient : IElasticClient
1213 {
1314 public ISearchResponse < T > SearchTemplate < T > ( Func < SearchTemplateDescriptor < T > , SearchTemplateDescriptor < T > > selector ) where T : class
1415 {
@@ -31,6 +32,77 @@ public ISearchResponse<TResult> SearchTemplate<T, TResult>(Func<SearchTemplateDe
3132 return status . Success ? status . Response : CreateInvalidInstance < SearchResponse < TResult > > ( status ) ;
3233 }
3334
35+ public ISearchResponse < T > SearchTemplate < T > ( ISearchTemplateRequest request ) where T : class
36+ {
37+ return this . SearchTemplate < T , T > ( request ) ;
38+ }
39+
40+ public ISearchResponse < TResult > SearchTemplate < T , TResult > ( ISearchTemplateRequest request )
41+ where T : class
42+ where TResult : class
43+ {
44+ var pathInfo = request
45+ . ToPathInfo ( _connectionSettings )
46+ . DeserializationState ( this . CreateSearchDeserializer < T , TResult > ( request ) ) ;
47+
48+ var status = this . RawDispatch . SearchTemplateDispatch < SearchResponse < TResult > > ( pathInfo , request ) ;
49+ return status . Success ? status . Response : CreateInvalidInstance < SearchResponse < TResult > > ( status ) ;
50+ }
51+
52+ public Task < ISearchResponse < T > > SearchTemplateAsync < T > ( Func < SearchTemplateDescriptor < T > , SearchTemplateDescriptor < T > > selector ) where T : class
53+ {
54+ return this . SearchTemplateAsync < T , T > ( selector ) ;
55+ }
56+
57+ public Task < ISearchResponse < TResult > > SearchTemplateAsync < T , TResult > ( Func < SearchTemplateDescriptor < T > , SearchTemplateDescriptor < T > > selector )
58+ where T : class
59+ where TResult : class
60+ {
61+ selector . ThrowIfNull ( "selector" ) ;
62+ var descriptor = selector ( new SearchTemplateDescriptor < T > ( ) ) ;
63+
64+ IPathInfo < SearchTemplateRequestParameters > p = descriptor ;
65+ var pathInfo = p
66+ . ToPathInfo ( _connectionSettings )
67+ . DeserializationState ( CreateSearchDeserializer < T , TResult > ( descriptor ) ) ;
68+
69+ return this . RawDispatch . SearchTemplateDispatchAsync < SearchResponse < TResult > > ( pathInfo , descriptor )
70+ . ContinueWith < ISearchResponse < TResult > > ( t =>
71+ {
72+ if ( t . IsFaulted )
73+ throw t . Exception . Flatten ( ) . InnerException ;
74+
75+ return t . Result . Success
76+ ? t . Result . Response
77+ : CreateInvalidInstance < SearchResponse < TResult > > ( t . Result ) ;
78+ } ) ;
79+ }
80+
81+ public Task < ISearchResponse < T > > SearchTemplateAsync < T > ( ISearchTemplateRequest request ) where T : class
82+ {
83+ return this . SearchTemplateAsync < T , T > ( request ) ;
84+ }
85+
86+ public Task < ISearchResponse < TResult > > SearchTemplateAsync < T , TResult > ( ISearchTemplateRequest request )
87+ where T : class
88+ where TResult : class
89+ {
90+ var pathInfo = request
91+ . ToPathInfo ( _connectionSettings )
92+ . DeserializationState ( this . CreateSearchDeserializer < T , TResult > ( request ) ) ;
93+
94+ return this . RawDispatch . SearchTemplateDispatchAsync < SearchResponse < TResult > > ( pathInfo , request )
95+ . ContinueWith < ISearchResponse < TResult > > ( t =>
96+ {
97+ if ( t . IsFaulted )
98+ throw t . Exception . Flatten ( ) . InnerException ;
99+
100+ return t . Result . Success
101+ ? t . Result . Response
102+ : CreateInvalidInstance < SearchResponse < TResult > > ( t . Result ) ;
103+ } ) ;
104+ }
105+
34106 private SearchResponse < TResult > FieldsSearchDeserializer < T , TResult > ( IElasticsearchResponse response , Stream stream , ISearchTemplateRequest d )
35107 where T : class
36108 where TResult : class
0 commit comments