Skip to content

Commit 33a1fc3

Browse files
committed
Complete support for Get/Put/Delete search templates with integrations tests
1 parent aeb4a89 commit 33a1fc3

File tree

6 files changed

+176
-69
lines changed

6 files changed

+176
-69
lines changed

src/Nest/DSL/DeleteSearchTemplateDescriptor.cs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,37 +8,37 @@
88
namespace Nest
99
{
1010
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
11-
public interface IDeleteSearchTemplateRequest : INamePath<SearchTemplateRequestParameters> { }
11+
public interface IDeleteSearchTemplateRequest : INamePath<DeleteTemplateRequestParameters> { }
1212

1313
public partial class DeleteSearchTemplateRequest
14-
: NamePathBase<SearchTemplateRequestParameters>, IDeleteSearchTemplateRequest
14+
: NamePathBase<DeleteTemplateRequestParameters>, IDeleteSearchTemplateRequest
1515
{
1616
public DeleteSearchTemplateRequest(string templateName)
1717
: base(templateName)
1818
{
1919
}
2020

21-
protected override void UpdatePathInfo(IConnectionSettingsValues settings, ElasticsearchPathInfo<SearchTemplateRequestParameters> pathInfo)
21+
protected override void UpdatePathInfo(IConnectionSettingsValues settings, ElasticsearchPathInfo<DeleteTemplateRequestParameters> pathInfo)
2222
{
23-
DeleteSearchTemplatePathInfo.Update(pathInfo);
23+
DeleteSearchTemplatePathInfo.Update(pathInfo, this);
2424
}
2525
}
2626

2727
internal static class DeleteSearchTemplatePathInfo
2828
{
29-
public static void Update(ElasticsearchPathInfo<SearchTemplateRequestParameters> pathInfo)
29+
public static void Update(ElasticsearchPathInfo<DeleteTemplateRequestParameters> pathInfo, IDeleteSearchTemplateRequest request)
3030
{
31-
pathInfo.HttpMethod = PathInfoHttpMethod.GET;
31+
pathInfo.Id = request.Name;
32+
pathInfo.HttpMethod = PathInfoHttpMethod.DELETE;
3233
}
3334
}
3435

35-
[DescriptorFor("SearchTemplateDelete")]
3636
public partial class DeleteSearchTemplateDescriptor
37-
: NamePathDescriptor<DeleteSearchTemplateDescriptor, SearchTemplateRequestParameters>, IDeleteSearchTemplateRequest
37+
: NamePathDescriptor<DeleteSearchTemplateDescriptor, DeleteTemplateRequestParameters>, IDeleteSearchTemplateRequest
3838
{
39-
protected override void UpdatePathInfo(IConnectionSettingsValues settings, ElasticsearchPathInfo<SearchTemplateRequestParameters> pathInfo)
39+
protected override void UpdatePathInfo(IConnectionSettingsValues settings, ElasticsearchPathInfo<DeleteTemplateRequestParameters> pathInfo)
4040
{
41-
DeleteSearchTemplatePathInfo.Update(pathInfo);
41+
DeleteSearchTemplatePathInfo.Update(pathInfo, this);
4242
}
4343
}
4444
}

src/Nest/DSL/GetSearchTemplateDescriptor.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,39 +8,39 @@
88
namespace Nest
99
{
1010
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
11-
public interface IGetSearchTemplateRequest : INamePath<SearchTemplateRequestParameters>
11+
public interface IGetSearchTemplateRequest : INamePath<GetTemplateRequestParameters>
1212
{
1313
}
1414

1515
public partial class GetSearchTemplateRequest
16-
: NamePathBase<SearchTemplateRequestParameters>, IGetSearchTemplateRequest
16+
: NamePathBase<GetTemplateRequestParameters>, IGetSearchTemplateRequest
1717
{
1818
public GetSearchTemplateRequest(string templateName)
1919
: base(templateName)
2020
{
2121
}
2222

23-
protected override void UpdatePathInfo(IConnectionSettingsValues settings, ElasticsearchPathInfo<SearchTemplateRequestParameters> pathInfo)
23+
protected override void UpdatePathInfo(IConnectionSettingsValues settings, ElasticsearchPathInfo<GetTemplateRequestParameters> pathInfo)
2424
{
25-
GetSearchTemplatePathInfo.Update(pathInfo);
25+
GetSearchTemplatePathInfo.Update(pathInfo, this);
2626
}
2727
}
2828

2929
internal static class GetSearchTemplatePathInfo
3030
{
31-
public static void Update(ElasticsearchPathInfo<SearchTemplateRequestParameters> pathInfo)
31+
public static void Update(ElasticsearchPathInfo<GetTemplateRequestParameters> pathInfo, IGetSearchTemplateRequest request)
3232
{
33+
pathInfo.Id = request.Name;
3334
pathInfo.HttpMethod = PathInfoHttpMethod.GET;
3435
}
3536
}
3637

37-
[DescriptorFor("SearchTemplateGet")]
3838
public partial class GetSearchTemplateDescriptor
39-
: NamePathDescriptor<GetSearchTemplateDescriptor, SearchTemplateRequestParameters>, IGetSearchTemplateRequest
39+
: NamePathDescriptor<GetSearchTemplateDescriptor, GetTemplateRequestParameters>, IGetSearchTemplateRequest
4040
{
41-
protected override void UpdatePathInfo(IConnectionSettingsValues settings, ElasticsearchPathInfo<SearchTemplateRequestParameters> pathInfo)
41+
protected override void UpdatePathInfo(IConnectionSettingsValues settings, ElasticsearchPathInfo<GetTemplateRequestParameters> pathInfo)
4242
{
43-
GetSearchTemplatePathInfo.Update(pathInfo);
43+
GetSearchTemplatePathInfo.Update(pathInfo, this);
4444
}
4545
}
4646
}

src/Nest/DSL/PutSearchTemplateDescriptor.cs

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,38 +8,52 @@
88
namespace Nest
99
{
1010
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
11-
public interface IPutSearchTemplateRequest : INamePath<SearchTemplateRequestParameters>
11+
public interface IPutSearchTemplateRequest : INamePath<PutTemplateRequestParameters>
1212
{
13+
[JsonProperty("template")]
14+
string Template { get; set; }
1315
}
1416

15-
public partial class PutSearchTemplateRequest : NamePathBase<SearchTemplateRequestParameters>, IPutSearchTemplateRequest
17+
public partial class PutSearchTemplateRequest : NamePathBase<PutTemplateRequestParameters>, IPutSearchTemplateRequest
1618
{
19+
public string Template { get; set; }
20+
1721
public PutSearchTemplateRequest(string templateName)
1822
: base(templateName)
1923
{
2024
}
2125

22-
protected override void UpdatePathInfo(IConnectionSettingsValues settings, ElasticsearchPathInfo<SearchTemplateRequestParameters> pathInfo)
26+
protected override void UpdatePathInfo(IConnectionSettingsValues settings, ElasticsearchPathInfo<PutTemplateRequestParameters> pathInfo)
2327
{
24-
PutSearchTemplatePathInfo.Update(pathInfo);
28+
PutSearchTemplatePathInfo.Update(pathInfo, this);
2529
}
2630
}
2731

2832
internal static class PutSearchTemplatePathInfo
2933
{
30-
public static void Update(ElasticsearchPathInfo<SearchTemplateRequestParameters> pathInfo)
34+
public static void Update(ElasticsearchPathInfo<PutTemplateRequestParameters> pathInfo, IPutSearchTemplateRequest request)
3135
{
36+
pathInfo.Id = request.Name;
3237
pathInfo.HttpMethod = PathInfoHttpMethod.POST;
3338
}
3439
}
3540

3641
[DescriptorFor("SearchTemplatePut")]
3742
public partial class PutSearchTemplateDescriptor
38-
: NamePathDescriptor<PutSearchTemplateDescriptor, SearchTemplateRequestParameters>, IPutSearchTemplateRequest
43+
: NamePathDescriptor<PutSearchTemplateDescriptor, PutTemplateRequestParameters>, IPutSearchTemplateRequest
3944
{
40-
protected override void UpdatePathInfo(IConnectionSettingsValues settings, ElasticsearchPathInfo<SearchTemplateRequestParameters> pathInfo)
45+
IPutSearchTemplateRequest Self { get { return this; } }
46+
string IPutSearchTemplateRequest.Template { get; set;}
47+
48+
public PutSearchTemplateDescriptor Template(string template)
49+
{
50+
this.Self.Template = template;
51+
return this;
52+
}
53+
54+
protected override void UpdatePathInfo(IConnectionSettingsValues settings, ElasticsearchPathInfo<PutTemplateRequestParameters> pathInfo)
4155
{
42-
PutSearchTemplatePathInfo.Update(pathInfo);
56+
PutSearchTemplatePathInfo.Update(pathInfo, this);
4357
}
4458
}
4559
}
Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System;
1+
using Newtonsoft.Json;
2+
using System;
23
using System.Collections.Generic;
34
using System.Linq;
45
using System.Text;
@@ -7,9 +8,13 @@ namespace Nest
78
{
89
public interface IGetSearchTemplateResponse : IResponse
910
{
11+
string Template { get; set; }
1012
}
1113

14+
[JsonObject]
1215
public class GetSearchTemplateResponse : BaseResponse, IGetSearchTemplateResponse
1316
{
17+
[JsonProperty("template")]
18+
public string Template { get; set; }
1419
}
1520
}

src/Nest/ElasticClient-SearchTemplate.cs

Lines changed: 83 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -103,93 +103,135 @@ public Task<ISearchResponse<TResult>> SearchTemplateAsync<T, TResult>(ISearchTem
103103
});
104104
}
105105

106-
private SearchResponse<TResult> FieldsSearchDeserializer<T, TResult>(IElasticsearchResponse response, Stream stream, ISearchTemplateRequest d)
107-
where T : class
108-
where TResult : class
109-
{
110-
var converter = this.CreateCovariantSearchSelector<T, TResult>(d);
111-
var dict = response.Success
112-
? Serializer.DeserializeInternal<SearchResponse<TResult>>(stream, converter)
113-
: null;
114-
return dict;
115-
}
116-
117-
private Func<IElasticsearchResponse, Stream, SearchResponse<TResult>> CreateSearchDeserializer<T, TResult>(ISearchTemplateRequest request)
118-
where T : class
119-
where TResult : class
120-
{
121-
122-
Func<IElasticsearchResponse, Stream, SearchResponse<TResult>> responseCreator =
123-
(r, s) => this.FieldsSearchDeserializer<T, TResult>(r, s, request);
124-
return responseCreator;
125-
}
126-
127-
private JsonConverter CreateCovariantSearchSelector<T, TResult>(ISearchTemplateRequest originalSearchDescriptor)
128-
where T : class
129-
where TResult : class
130-
{
131-
SearchTemplatePathInfo.CloseOverAutomagicCovariantResultSelector(this.Infer, originalSearchDescriptor);
132-
return originalSearchDescriptor.TypeSelector == null ? null : new ConcreteTypeConverter<TResult>(originalSearchDescriptor.TypeSelector);
133-
}
134-
135106
public IGetSearchTemplateResponse GetSearchTemplate(Func<GetSearchTemplateDescriptor, GetSearchTemplateDescriptor> selector)
136107
{
137-
throw new NotImplementedException();
108+
selector = selector ?? (s => s);
109+
return this.Dispatch<GetSearchTemplateDescriptor, GetTemplateRequestParameters, GetSearchTemplateResponse>(
110+
selector,
111+
(p, d) => this.RawDispatch.GetTemplateDispatch<GetSearchTemplateResponse>(p, d)
112+
);
138113
}
139114

140115
public IGetSearchTemplateResponse GetSearchTemplate(IGetSearchTemplateRequest request)
141116
{
142-
throw new NotImplementedException();
117+
return this.Dispatch<IGetSearchTemplateRequest, GetTemplateRequestParameters, GetSearchTemplateResponse>(
118+
request,
119+
(p, d) => this.RawDispatch.GetTemplateDispatch<GetSearchTemplateResponse>(p, d)
120+
);
143121
}
144122

145123
public Task<IGetSearchTemplateResponse> GetSearchTemplateAsync(Func<GetSearchTemplateDescriptor, GetSearchTemplateDescriptor> selector)
146124
{
147-
throw new NotImplementedException();
125+
selector = selector ?? (s => s);
126+
return this.DispatchAsync<GetSearchTemplateDescriptor, GetTemplateRequestParameters, GetSearchTemplateResponse, IGetSearchTemplateResponse>(
127+
selector,
128+
(p, d) => this.RawDispatch.GetTemplateDispatchAsync<GetSearchTemplateResponse>(p, d)
129+
);
148130
}
149131

150132
public Task<IGetSearchTemplateResponse> GetSearchTemplateAsync(IGetSearchTemplateRequest request)
151133
{
152-
throw new NotImplementedException();
134+
return this.DispatchAsync<IGetSearchTemplateRequest, GetTemplateRequestParameters, GetSearchTemplateResponse, IGetSearchTemplateResponse>(
135+
request,
136+
(p, d) => this.RawDispatch.GetTemplateDispatchAsync<GetSearchTemplateResponse>(p, d)
137+
);
153138
}
154139

155140
public IPutSearchTemplateResponse PutSearchTemplate(Func<PutSearchTemplateDescriptor, PutSearchTemplateDescriptor> selector)
156141
{
157-
throw new NotImplementedException();
142+
selector = selector ?? (s => s);
143+
return this.Dispatch<PutSearchTemplateDescriptor, PutTemplateRequestParameters, PutSearchTemplateResponse>(
144+
selector,
145+
(p, d) => this.RawDispatch.PutTemplateDispatch<PutSearchTemplateResponse>(p, d)
146+
);
158147
}
159148

160149
public IPutSearchTemplateResponse PutSearchTemplate(IPutSearchTemplateRequest request)
161150
{
162-
throw new NotImplementedException();
151+
return this.Dispatch<IPutSearchTemplateRequest, PutTemplateRequestParameters, PutSearchTemplateResponse>(
152+
request,
153+
(p, d) => this.RawDispatch.PutTemplateDispatch<PutSearchTemplateResponse>(p, d)
154+
);
163155
}
164156

165157
public Task<IPutSearchTemplateResponse> PutSearchTemplateAsync(Func<PutSearchTemplateDescriptor, PutSearchTemplateDescriptor> selector)
166158
{
167-
throw new NotImplementedException();
159+
selector = selector ?? (s => s);
160+
return this.DispatchAsync<PutSearchTemplateDescriptor, PutTemplateRequestParameters, PutSearchTemplateResponse, IPutSearchTemplateResponse>(
161+
selector,
162+
(p, d) => this.RawDispatch.PutTemplateDispatchAsync<PutSearchTemplateResponse>(p, d)
163+
);
168164
}
169165

170166
public Task<IPutSearchTemplateResponse> PutSearchTemplateAsync(IPutSearchTemplateRequest request)
171167
{
172-
throw new NotImplementedException();
168+
return this.DispatchAsync<IPutSearchTemplateRequest, PutTemplateRequestParameters, PutSearchTemplateResponse, IPutSearchTemplateResponse>(
169+
request,
170+
(p, d) => this.RawDispatch.PutTemplateDispatchAsync<PutSearchTemplateResponse>(p, d)
171+
);
173172
}
174173

175174
public IDeleteSearchTemplateResponse DeleteSearchTemplate(Func<DeleteSearchTemplateDescriptor, DeleteSearchTemplateDescriptor> selector)
176175
{
177-
throw new NotImplementedException();
176+
selector = selector ?? (s => s);
177+
return this.Dispatch<DeleteSearchTemplateDescriptor, DeleteTemplateRequestParameters, DeleteSearchTemplateResponse>(
178+
selector,
179+
(p, d) => this.RawDispatch.DeleteTemplateDispatch<DeleteSearchTemplateResponse>(p)
180+
);
178181
}
179182

180183
public IDeleteSearchTemplateResponse DeleteSearchTemplate(IDeleteSearchTemplateRequest request)
181184
{
182-
throw new NotImplementedException();
185+
return this.Dispatch<IDeleteSearchTemplateRequest, DeleteTemplateRequestParameters, DeleteSearchTemplateResponse>(
186+
request,
187+
(p, d) => this.RawDispatch.DeleteTemplateDispatch<DeleteSearchTemplateResponse>(p)
188+
);
183189
}
184190

185191
public Task<IDeleteSearchTemplateResponse> DeleteSearchTemplateAsync(Func<DeleteSearchTemplateDescriptor, DeleteSearchTemplateDescriptor> selector)
186192
{
187-
throw new NotImplementedException();
193+
selector = selector ?? (s => s);
194+
return this.DispatchAsync<DeleteSearchTemplateDescriptor, DeleteTemplateRequestParameters, DeleteSearchTemplateResponse, IDeleteSearchTemplateResponse>(
195+
selector,
196+
(p, d) => this.RawDispatch.DeleteTemplateDispatchAsync<DeleteSearchTemplateResponse>(p)
197+
);
188198
}
189199

190200
public Task<IDeleteSearchTemplateResponse> DeleteSearchTemplateAsync(IDeleteSearchTemplateRequest request)
191201
{
192-
throw new NotImplementedException();
202+
return this.DispatchAsync<IDeleteSearchTemplateRequest, DeleteTemplateRequestParameters, DeleteSearchTemplateResponse, IDeleteSearchTemplateResponse>(
203+
request,
204+
(p, d) => this.RawDispatch.DeleteTemplateDispatchAsync<DeleteSearchTemplateResponse>(p)
205+
);
206+
}
207+
208+
private SearchResponse<TResult> FieldsSearchDeserializer<T, TResult>(IElasticsearchResponse response, Stream stream, ISearchTemplateRequest d)
209+
where T : class
210+
where TResult : class
211+
{
212+
var converter = this.CreateCovariantSearchSelector<T, TResult>(d);
213+
var dict = response.Success
214+
? Serializer.DeserializeInternal<SearchResponse<TResult>>(stream, converter)
215+
: null;
216+
return dict;
217+
}
218+
219+
private Func<IElasticsearchResponse, Stream, SearchResponse<TResult>> CreateSearchDeserializer<T, TResult>(ISearchTemplateRequest request)
220+
where T : class
221+
where TResult : class
222+
{
223+
224+
Func<IElasticsearchResponse, Stream, SearchResponse<TResult>> responseCreator =
225+
(r, s) => this.FieldsSearchDeserializer<T, TResult>(r, s, request);
226+
return responseCreator;
227+
}
228+
229+
private JsonConverter CreateCovariantSearchSelector<T, TResult>(ISearchTemplateRequest originalSearchDescriptor)
230+
where T : class
231+
where TResult : class
232+
{
233+
SearchTemplatePathInfo.CloseOverAutomagicCovariantResultSelector(this.Infer, originalSearchDescriptor);
234+
return originalSearchDescriptor.TypeSelector == null ? null : new ConcreteTypeConverter<TResult>(originalSearchDescriptor.TypeSelector);
193235
}
194236
}
195237
}

0 commit comments

Comments
 (0)