Skip to content

Commit 9214966

Browse files
authored
Fix MGet Ids and Docs serialization (#6532)
* Add MGet Ids serialization tests * Add converter for Ids * Add MGet docs serialization tests * Updated code gen to fix serialisation of array properties * Update MGet serialization tests * Add MGet integration test
1 parent 2f5d5cb commit 9214966

File tree

92 files changed

+1032
-5
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

92 files changed

+1032
-5
lines changed

Diff for: src/Elastic.Clients.Elasticsearch/Common/Infer/Id/Ids.cs

+64-5
Original file line numberDiff line numberDiff line change
@@ -6,23 +6,32 @@
66
using System.Collections.Generic;
77
using System.Diagnostics;
88
using System.Linq;
9+
using System.Text.Json;
10+
using System.Text.Json.Serialization;
911
using Elastic.Transport;
1012

1113
namespace Elastic.Clients.Elasticsearch
1214
{
1315
[DebuggerDisplay("{DebugDisplay,nq}")]
16+
[JsonConverter(typeof(IdsConverter))]
1417
public partial class Ids : IUrlParameter, IEquatable<Ids>
1518
{
16-
private readonly List<string> _ids;
19+
private readonly IList<Id> _ids;
1720

18-
public Ids(IEnumerable<string> value) => _ids = value?.ToList();
21+
public Ids(IEnumerable<Id> ids) => _ids = ids.ToList();
22+
23+
public Ids(IList<Id> ids) => _ids = ids;
24+
25+
public Ids(IEnumerable<string> ids) => _ids = ids?.Select(i => new Id(i)).ToList();
1926

2027
public Ids(string value)
2128
{
2229
if (!value.IsNullOrEmptyCommaSeparatedList(out var arr))
23-
_ids = arr.ToList();
30+
_ids = arr.Select(i => new Id(i)).ToList();
2431
}
2532

33+
internal IList<Id> IdsToSerialize => _ids;
34+
2635
private string DebugDisplay => ((IUrlParameter)this).GetString(null);
2736

2837
public bool Equals(Ids other)
@@ -38,8 +47,15 @@ public bool Equals(Ids other)
3847
_ids.OrderBy(id => id).SequenceEqual(other._ids.OrderBy(id => id));
3948
}
4049

41-
string IUrlParameter.GetString(ITransportConfiguration? settings) =>
42-
string.Join(",", _ids ?? Enumerable.Empty<string>());
50+
string IUrlParameter.GetString(ITransportConfiguration? settings)
51+
{
52+
if (settings is not ElasticsearchClientSettings elasticsearchClientSettings)
53+
{
54+
throw new Exception("Unexpected settings type.");
55+
}
56+
57+
return string.Join(",", _ids.Select(i => i.GetString(elasticsearchClientSettings)) ?? Enumerable.Empty<string>());
58+
}
4359

4460
public override string ToString() => DebugDisplay;
4561

@@ -68,4 +84,47 @@ public override int GetHashCode()
6884

6985
public static bool operator !=(Ids left, Ids right) => !Equals(left, right);
7086
}
87+
88+
internal sealed class IdsConverter : JsonConverter<Ids>
89+
{
90+
private readonly IElasticsearchClientSettings _settings;
91+
92+
public IdsConverter(IElasticsearchClientSettings settings) => _settings = settings;
93+
94+
public override Ids? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
95+
{
96+
if (reader.TokenType != JsonTokenType.StartArray)
97+
throw new JsonException($"Unexpected JSON token. Expected {JsonTokenType.StartArray} but read {reader.TokenType}");
98+
99+
var ids = new List<Id>();
100+
101+
while (reader.Read() && reader.TokenType != JsonTokenType.EndArray)
102+
{
103+
var id = JsonSerializer.Deserialize<Id>(ref reader, options);
104+
105+
if (id is not null)
106+
ids.Add(id);
107+
}
108+
109+
return new Ids(ids);
110+
}
111+
112+
public override void Write(Utf8JsonWriter writer, Ids value, JsonSerializerOptions options)
113+
{
114+
if (value is null)
115+
{
116+
writer.WriteNullValue();
117+
return;
118+
}
119+
120+
writer.WriteStartArray();
121+
122+
foreach (var id in value.IdsToSerialize)
123+
{
124+
JsonSerializer.Serialize<Id>(writer, id, options);
125+
}
126+
127+
writer.WriteEndArray();
128+
}
129+
}
71130
}

Diff for: src/Elastic.Clients.Elasticsearch/Serialization/DefaultRequestResponseSerializer.cs

+1
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ public DefaultRequestResponseSerializer(IElasticsearchClientSettings settings)
5656
new SelfTwoWaySerializableConverterFactory(settings),
5757
new IndicesJsonConverter(settings),
5858
new PropertyNameConverter(settings),
59+
new IdsConverter(settings),
5960
new IsADictionaryConverter(),
6061
new ResponseItemConverterFactory(),
6162
new UnionConverter(),

Diff for: src/Elastic.Clients.Elasticsearch/Serialization/DefaultSourceSerializer.cs

+1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ public DefaultSourceSerializer(IElasticsearchClientSettings settings, JsonSerial
2323
new PropertyNameConverter(settings),
2424
new JoinFieldConverter(settings),
2525
new LazyDocumentConverter(settings),
26+
new IdsConverter(settings)
2627
},
2728
PropertyNamingPolicy = JsonNamingPolicy.CamelCase
2829
};

Diff for: src/Elastic.Clients.Elasticsearch/_Generated/Api/AsyncSearch/AsyncSearchSubmitRequest.g.cs

+24
Original file line numberDiff line numberDiff line change
@@ -978,12 +978,16 @@ protected override void Serialize(Utf8JsonWriter writer, JsonSerializerOptions o
978978
if (DocvalueFieldsDescriptor is not null)
979979
{
980980
writer.WritePropertyName("docvalue_fields");
981+
writer.WriteStartArray();
981982
JsonSerializer.Serialize(writer, DocvalueFieldsDescriptor, options);
983+
writer.WriteEndArray();
982984
}
983985
else if (DocvalueFieldsDescriptorAction is not null)
984986
{
985987
writer.WritePropertyName("docvalue_fields");
988+
writer.WriteStartArray();
986989
JsonSerializer.Serialize(writer, new QueryDsl.FieldAndFormatDescriptor<TDocument>(DocvalueFieldsDescriptorAction), options);
990+
writer.WriteEndArray();
987991
}
988992
else if (DocvalueFieldsDescriptorActions is not null)
989993
{
@@ -1005,12 +1009,16 @@ protected override void Serialize(Utf8JsonWriter writer, JsonSerializerOptions o
10051009
if (FieldsDescriptor is not null)
10061010
{
10071011
writer.WritePropertyName("fields");
1012+
writer.WriteStartArray();
10081013
JsonSerializer.Serialize(writer, FieldsDescriptor, options);
1014+
writer.WriteEndArray();
10091015
}
10101016
else if (FieldsDescriptorAction is not null)
10111017
{
10121018
writer.WritePropertyName("fields");
1019+
writer.WriteStartArray();
10131020
JsonSerializer.Serialize(writer, new QueryDsl.FieldAndFormatDescriptor<TDocument>(FieldsDescriptorAction), options);
1021+
writer.WriteEndArray();
10141022
}
10151023
else if (FieldsDescriptorActions is not null)
10161024
{
@@ -1080,12 +1088,16 @@ protected override void Serialize(Utf8JsonWriter writer, JsonSerializerOptions o
10801088
if (RescoreDescriptor is not null)
10811089
{
10821090
writer.WritePropertyName("rescore");
1091+
writer.WriteStartArray();
10831092
JsonSerializer.Serialize(writer, RescoreDescriptor, options);
1093+
writer.WriteEndArray();
10841094
}
10851095
else if (RescoreDescriptorAction is not null)
10861096
{
10871097
writer.WritePropertyName("rescore");
1098+
writer.WriteStartArray();
10881099
JsonSerializer.Serialize(writer, new RescoreDescriptor<TDocument>(RescoreDescriptorAction), options);
1100+
writer.WriteEndArray();
10891101
}
10901102
else if (RescoreDescriptorActions is not null)
10911103
{
@@ -1892,12 +1904,16 @@ protected override void Serialize(Utf8JsonWriter writer, JsonSerializerOptions o
18921904
if (DocvalueFieldsDescriptor is not null)
18931905
{
18941906
writer.WritePropertyName("docvalue_fields");
1907+
writer.WriteStartArray();
18951908
JsonSerializer.Serialize(writer, DocvalueFieldsDescriptor, options);
1909+
writer.WriteEndArray();
18961910
}
18971911
else if (DocvalueFieldsDescriptorAction is not null)
18981912
{
18991913
writer.WritePropertyName("docvalue_fields");
1914+
writer.WriteStartArray();
19001915
JsonSerializer.Serialize(writer, new QueryDsl.FieldAndFormatDescriptor(DocvalueFieldsDescriptorAction), options);
1916+
writer.WriteEndArray();
19011917
}
19021918
else if (DocvalueFieldsDescriptorActions is not null)
19031919
{
@@ -1919,12 +1935,16 @@ protected override void Serialize(Utf8JsonWriter writer, JsonSerializerOptions o
19191935
if (FieldsDescriptor is not null)
19201936
{
19211937
writer.WritePropertyName("fields");
1938+
writer.WriteStartArray();
19221939
JsonSerializer.Serialize(writer, FieldsDescriptor, options);
1940+
writer.WriteEndArray();
19231941
}
19241942
else if (FieldsDescriptorAction is not null)
19251943
{
19261944
writer.WritePropertyName("fields");
1945+
writer.WriteStartArray();
19271946
JsonSerializer.Serialize(writer, new QueryDsl.FieldAndFormatDescriptor(FieldsDescriptorAction), options);
1947+
writer.WriteEndArray();
19281948
}
19291949
else if (FieldsDescriptorActions is not null)
19301950
{
@@ -1994,12 +2014,16 @@ protected override void Serialize(Utf8JsonWriter writer, JsonSerializerOptions o
19942014
if (RescoreDescriptor is not null)
19952015
{
19962016
writer.WritePropertyName("rescore");
2017+
writer.WriteStartArray();
19972018
JsonSerializer.Serialize(writer, RescoreDescriptor, options);
2019+
writer.WriteEndArray();
19982020
}
19992021
else if (RescoreDescriptorAction is not null)
20002022
{
20012023
writer.WritePropertyName("rescore");
2024+
writer.WriteStartArray();
20022025
JsonSerializer.Serialize(writer, new RescoreDescriptor(RescoreDescriptorAction), options);
2026+
writer.WriteEndArray();
20032027
}
20042028
else if (RescoreDescriptorActions is not null)
20052029
{

Diff for: src/Elastic.Clients.Elasticsearch/_Generated/Api/Cluster/ClusterRerouteRequest.g.cs

+4
Original file line numberDiff line numberDiff line change
@@ -140,12 +140,16 @@ protected override void Serialize(Utf8JsonWriter writer, JsonSerializerOptions o
140140
if (CommandsDescriptor is not null)
141141
{
142142
writer.WritePropertyName("commands");
143+
writer.WriteStartArray();
143144
JsonSerializer.Serialize(writer, CommandsDescriptor, options);
145+
writer.WriteEndArray();
144146
}
145147
else if (CommandsDescriptorAction is not null)
146148
{
147149
writer.WritePropertyName("commands");
150+
writer.WriteStartArray();
148151
JsonSerializer.Serialize(writer, new CommandDescriptor(CommandsDescriptorAction), options);
152+
writer.WriteEndArray();
149153
}
150154
else if (CommandsDescriptorActions is not null)
151155
{

Diff for: src/Elastic.Clients.Elasticsearch/_Generated/Api/Eql/EqlSearchRequest.g.cs

+16
Original file line numberDiff line numberDiff line change
@@ -343,12 +343,16 @@ protected override void Serialize(Utf8JsonWriter writer, JsonSerializerOptions o
343343
if (FieldsDescriptor is not null)
344344
{
345345
writer.WritePropertyName("fields");
346+
writer.WriteStartArray();
346347
JsonSerializer.Serialize(writer, FieldsDescriptor, options);
348+
writer.WriteEndArray();
347349
}
348350
else if (FieldsDescriptorAction is not null)
349351
{
350352
writer.WritePropertyName("fields");
353+
writer.WriteStartArray();
351354
JsonSerializer.Serialize(writer, new QueryDsl.FieldAndFormatDescriptor<TDocument>(FieldsDescriptorAction), options);
355+
writer.WriteEndArray();
352356
}
353357
else if (FieldsDescriptorActions is not null)
354358
{
@@ -370,12 +374,16 @@ protected override void Serialize(Utf8JsonWriter writer, JsonSerializerOptions o
370374
if (FilterDescriptor is not null)
371375
{
372376
writer.WritePropertyName("filter");
377+
writer.WriteStartArray();
373378
JsonSerializer.Serialize(writer, FilterDescriptor, options);
379+
writer.WriteEndArray();
374380
}
375381
else if (FilterDescriptorAction is not null)
376382
{
377383
writer.WritePropertyName("filter");
384+
writer.WriteStartArray();
378385
JsonSerializer.Serialize(writer, new QueryDsl.QueryContainerDescriptor<TDocument>(FilterDescriptorAction), options);
386+
writer.WriteEndArray();
379387
}
380388
else if (FilterDescriptorActions is not null)
381389
{
@@ -715,12 +723,16 @@ protected override void Serialize(Utf8JsonWriter writer, JsonSerializerOptions o
715723
if (FieldsDescriptor is not null)
716724
{
717725
writer.WritePropertyName("fields");
726+
writer.WriteStartArray();
718727
JsonSerializer.Serialize(writer, FieldsDescriptor, options);
728+
writer.WriteEndArray();
719729
}
720730
else if (FieldsDescriptorAction is not null)
721731
{
722732
writer.WritePropertyName("fields");
733+
writer.WriteStartArray();
723734
JsonSerializer.Serialize(writer, new QueryDsl.FieldAndFormatDescriptor(FieldsDescriptorAction), options);
735+
writer.WriteEndArray();
724736
}
725737
else if (FieldsDescriptorActions is not null)
726738
{
@@ -742,12 +754,16 @@ protected override void Serialize(Utf8JsonWriter writer, JsonSerializerOptions o
742754
if (FilterDescriptor is not null)
743755
{
744756
writer.WritePropertyName("filter");
757+
writer.WriteStartArray();
745758
JsonSerializer.Serialize(writer, FilterDescriptor, options);
759+
writer.WriteEndArray();
746760
}
747761
else if (FilterDescriptorAction is not null)
748762
{
749763
writer.WritePropertyName("filter");
764+
writer.WriteStartArray();
750765
JsonSerializer.Serialize(writer, new QueryDsl.QueryContainerDescriptor(FilterDescriptorAction), options);
766+
writer.WriteEndArray();
751767
}
752768
else if (FilterDescriptorActions is not null)
753769
{

Diff for: src/Elastic.Clients.Elasticsearch/_Generated/Api/Graph/GraphExploreRequest.g.cs

+8
Original file line numberDiff line numberDiff line change
@@ -276,12 +276,16 @@ protected override void Serialize(Utf8JsonWriter writer, JsonSerializerOptions o
276276
if (VerticesDescriptor is not null)
277277
{
278278
writer.WritePropertyName("vertices");
279+
writer.WriteStartArray();
279280
JsonSerializer.Serialize(writer, VerticesDescriptor, options);
281+
writer.WriteEndArray();
280282
}
281283
else if (VerticesDescriptorAction is not null)
282284
{
283285
writer.WritePropertyName("vertices");
286+
writer.WriteStartArray();
284287
JsonSerializer.Serialize(writer, new VertexDefinitionDescriptor<TDocument>(VerticesDescriptorAction), options);
288+
writer.WriteEndArray();
285289
}
286290
else if (VerticesDescriptorActions is not null)
287291
{
@@ -514,12 +518,16 @@ protected override void Serialize(Utf8JsonWriter writer, JsonSerializerOptions o
514518
if (VerticesDescriptor is not null)
515519
{
516520
writer.WritePropertyName("vertices");
521+
writer.WriteStartArray();
517522
JsonSerializer.Serialize(writer, VerticesDescriptor, options);
523+
writer.WriteEndArray();
518524
}
519525
else if (VerticesDescriptorAction is not null)
520526
{
521527
writer.WritePropertyName("vertices");
528+
writer.WriteStartArray();
522529
JsonSerializer.Serialize(writer, new VertexDefinitionDescriptor(VerticesDescriptorAction), options);
530+
writer.WriteEndArray();
523531
}
524532
else if (VerticesDescriptorActions is not null)
525533
{

0 commit comments

Comments
 (0)