Skip to content

Commit 2be69ec

Browse files
committed
Further serialisation on aggregations
1 parent 2c0c34c commit 2be69ec

File tree

71 files changed

+702
-861
lines changed

Some content is hidden

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

71 files changed

+702
-861
lines changed

benchmarks/Benchmarks/Program.cs

+28-3
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,40 @@
1+
using System.IO;
2+
using BenchmarkDotNet.Attributes;
3+
using BenchmarkDotNet.Running;
4+
using Dia2Lib;
5+
using Elastic.Clients.Elasticsearch;
6+
using Elastic.Clients.Elasticsearch.Aggregations;
7+
18
namespace Benchmarks;
29

310
internal class Program
411
{
5-
private static void Main()
6-
{
12+
private static void Main() =>
713
//var thing = new IndicesGetString() { NameCount = 3 };
814
//thing.Setup();
915
//thing.NaiveStringCreate();
1016

11-
//BenchmarkRunner.Run<OneOrMany>();
17+
_ = BenchmarkRunner.Run<SerialisePolymorphic>();
18+
}
19+
20+
21+
[MemoryDiagnoser]
22+
public class SerialisePolymorphic
23+
{
24+
25+
private readonly AggregationContainer _container1 = new AggregationContainer(new MinAggregation("testing"));
26+
private readonly ElasticClient _client = new ElasticClient();
27+
28+
29+
private readonly Stream _stream = new MemoryStream();
30+
31+
[Benchmark]
32+
public void Reflection()
33+
{
34+
_stream.Position = 0;
35+
_client.RequestResponseSerializer.Serialize(_container1, _stream);
1236
}
37+
1338
}
1439

1540
//[MemoryDiagnoser]

src/Elastic.Clients.Elasticsearch/FutureGenerated/FutureGenerated.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ public abstract class AggregationDescriptorBase<T> : DescriptorBase<T>, IAggrega
8484

8585
public partial class AggregationContainer
8686
{
87-
internal string ContainedVariantName { get; private set; }
87+
internal string ContainedVariantName { get; set; }
8888

8989
internal Action<Utf8JsonWriter, JsonSerializerOptions> SerializeFluent { get; private set; }
9090

src/Elastic.Clients.Elasticsearch/Serialization/AggregationContainerSerializationHelper.cs

+10-14
Original file line numberDiff line numberDiff line change
@@ -11,23 +11,19 @@ public static AggregationContainer ReadContainer<T>(ref Utf8JsonReader reader, J
1111
var variant = JsonSerializer.Deserialize<T?>(ref reader, options);
1212

1313
var container = new AggregationContainer(variant);
14-
15-
reader.Read();
1614

17-
if (reader.TokenType == JsonTokenType.PropertyName)
18-
{
19-
if (reader.ValueTextEquals("meta"))
20-
{
21-
var meta = JsonSerializer.Deserialize<Dictionary<string, object>>(ref reader, options);
15+
return container;
16+
}
2217

23-
//if (meta is not null)
24-
//{
25-
// container.Meta = meta;
26-
//}
18+
public static AggregationContainer ReadContainer<T>(string variantName, ref Utf8JsonReader reader, JsonSerializerOptions options) where T : AggregationBase
19+
{
20+
var variant = JsonSerializer.Deserialize<T?>(ref reader, options);
2721

28-
reader.Read();
29-
}
30-
}
22+
variant.Name = variantName;
23+
24+
var container = new AggregationContainer(variant);
25+
26+
reader.Read();
3127

3228
return container;
3329
}

src/Elastic.Clients.Elasticsearch/_Generated/Types/Aggregations/AdjacencyMatrixAggregation.g.cs

+7-10
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,12 @@ public override void Write(Utf8JsonWriter writer, AdjacencyMatrixAggregation val
3838
writer.WriteStartObject();
3939
writer.WritePropertyName("adjacency_matrix");
4040
writer.WriteStartObject();
41+
if (value.Filters is not null)
42+
{
43+
writer.WritePropertyName("filters");
44+
JsonSerializer.Serialize(writer, value.Filters, options);
45+
}
46+
4147
writer.WriteEndObject();
4248
if (value.Meta is not null)
4349
{
@@ -51,26 +57,17 @@ public override void Write(Utf8JsonWriter writer, AdjacencyMatrixAggregation val
5157
JsonSerializer.Serialize(writer, value.Aggregations, options);
5258
}
5359

54-
if (value.Filters is not null)
55-
{
56-
writer.WritePropertyName("filters");
57-
JsonSerializer.Serialize(writer, value.Filters, options);
58-
}
59-
6060
writer.WriteEndObject();
6161
}
6262
}
6363

6464
[JsonConverter(typeof(AdjacencyMatrixAggregationConverter))]
65-
public partial class AdjacencyMatrixAggregation : Aggregations.BucketAggregationBase, IAggregationContainerVariant
65+
public partial class AdjacencyMatrixAggregation : Aggregations.BucketAggregationBase
6666
{
67-
[JsonConstructor]
6867
public AdjacencyMatrixAggregation(string name) : base(name)
6968
{
7069
}
7170

72-
[JsonIgnore]
73-
string Aggregations.IAggregationContainerVariant.AggregationContainerVariantName => "adjacency_matrix";
7471
[JsonInclude]
7572
[JsonPropertyName("filters")]
7673
public Dictionary<string, Elastic.Clients.Elasticsearch.QueryDsl.QueryContainer>? Filters { get; set; }

src/Elastic.Clients.Elasticsearch/_Generated/Types/Aggregations/AggregationContainer.g.cs

+4-7
Original file line numberDiff line numberDiff line change
@@ -24,30 +24,27 @@
2424
#nullable restore
2525
namespace Elastic.Clients.Elasticsearch.Aggregations
2626
{
27-
public interface IAggregationContainerVariant
28-
{
29-
string AggregationContainerVariantName { get; }
30-
}
31-
3227
[JsonConverter(typeof(AggregationContainerConverter))]
3328
public partial class AggregationContainer : IContainer
3429
{
3530
public AggregationContainer(AggregationBase variant) => Variant = variant ?? throw new ArgumentNullException(nameof(variant));
36-
3731
internal AggregationBase Variant { get; }
3832
}
3933

4034
internal sealed class AggregationContainerConverter : JsonConverter<AggregationContainer>
4135
{
4236
public override AggregationContainer Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
4337
{
38+
//var readAheadCopy = reader;
39+
4440
reader.Read();
4541
if (reader.TokenType != JsonTokenType.PropertyName)
4642
{
4743
throw new JsonException();
4844
}
4945

5046
var propertyName = reader.GetString();
47+
5148
if (propertyName == "adjacency_matrix")
5249
{
5350
return AggregationContainerSerializationHelper.ReadContainer<Elastic.Clients.Elasticsearch.Aggregations.AdjacencyMatrixAggregation?>(ref reader, options);
@@ -220,7 +217,7 @@ public override AggregationContainer Read(ref Utf8JsonReader reader, Type typeTo
220217

221218
if (propertyName == "min")
222219
{
223-
return AggregationContainerSerializationHelper.ReadContainer<Elastic.Clients.Elasticsearch.Aggregations.MinAggregation?>(ref reader, options);
220+
return AggregationContainerSerializationHelper.ReadContainer<Elastic.Clients.Elasticsearch.Aggregations.MinAggregation?>("min", ref reader, options);
224221
}
225222

226223
if (propertyName == "min_bucket")

src/Elastic.Clients.Elasticsearch/_Generated/Types/Aggregations/AutoDateHistogramAggregation.g.cs

+14-17
Original file line numberDiff line numberDiff line change
@@ -38,19 +38,6 @@ public override void Write(Utf8JsonWriter writer, AutoDateHistogramAggregation v
3838
writer.WriteStartObject();
3939
writer.WritePropertyName("auto_date_histogram");
4040
writer.WriteStartObject();
41-
writer.WriteEndObject();
42-
if (value.Meta is not null)
43-
{
44-
writer.WritePropertyName("meta");
45-
JsonSerializer.Serialize(writer, value.Meta, options);
46-
}
47-
48-
if (value.Aggregations is not null)
49-
{
50-
writer.WritePropertyName("aggregations");
51-
JsonSerializer.Serialize(writer, value.Aggregations, options);
52-
}
53-
5441
if (value.Buckets.HasValue)
5542
{
5643
writer.WritePropertyName("buckets");
@@ -105,20 +92,30 @@ public override void Write(Utf8JsonWriter writer, AutoDateHistogramAggregation v
10592
writer.WriteStringValue(value.TimeZone);
10693
}
10794

95+
writer.WriteEndObject();
96+
if (value.Meta is not null)
97+
{
98+
writer.WritePropertyName("meta");
99+
JsonSerializer.Serialize(writer, value.Meta, options);
100+
}
101+
102+
if (value.Aggregations is not null)
103+
{
104+
writer.WritePropertyName("aggregations");
105+
JsonSerializer.Serialize(writer, value.Aggregations, options);
106+
}
107+
108108
writer.WriteEndObject();
109109
}
110110
}
111111

112112
[JsonConverter(typeof(AutoDateHistogramAggregationConverter))]
113-
public partial class AutoDateHistogramAggregation : Aggregations.BucketAggregationBase, IAggregationContainerVariant
113+
public partial class AutoDateHistogramAggregation : Aggregations.BucketAggregationBase
114114
{
115-
[JsonConstructor]
116115
public AutoDateHistogramAggregation(string name) : base(name)
117116
{
118117
}
119118

120-
[JsonIgnore]
121-
string Aggregations.IAggregationContainerVariant.AggregationContainerVariantName => "auto_date_histogram";
122119
[JsonInclude]
123120
[JsonPropertyName("buckets")]
124121
public int? Buckets { get; set; }

src/Elastic.Clients.Elasticsearch/_Generated/Types/Aggregations/AverageAggregation.g.cs

+8-12
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,6 @@ public override void Write(Utf8JsonWriter writer, AverageAggregation value, Json
3838
writer.WriteStartObject();
3939
writer.WritePropertyName("avg");
4040
writer.WriteStartObject();
41-
writer.WriteEndObject();
42-
if (value.Meta is not null)
43-
{
44-
writer.WritePropertyName("meta");
45-
JsonSerializer.Serialize(writer, value.Meta, options);
46-
}
47-
4841
if (!string.IsNullOrEmpty(value.Format))
4942
{
5043
writer.WritePropertyName("format");
@@ -69,21 +62,24 @@ public override void Write(Utf8JsonWriter writer, AverageAggregation value, Json
6962
JsonSerializer.Serialize(writer, value.Script, options);
7063
}
7164

65+
writer.WriteEndObject();
66+
if (value.Meta is not null)
67+
{
68+
writer.WritePropertyName("meta");
69+
JsonSerializer.Serialize(writer, value.Meta, options);
70+
}
71+
7272
writer.WriteEndObject();
7373
}
7474
}
7575

7676
[JsonConverter(typeof(AverageAggregationConverter))]
77-
public partial class AverageAggregation : Aggregations.FormatMetricAggregationBase, IAggregationContainerVariant
77+
public partial class AverageAggregation : Aggregations.FormatMetricAggregationBase
7878
{
7979
public AverageAggregation(string name, Field field) : base(name) => Field = field;
80-
[JsonConstructor]
8180
public AverageAggregation(string name) : base(name)
8281
{
8382
}
84-
85-
[JsonIgnore]
86-
string Aggregations.IAggregationContainerVariant.AggregationContainerVariantName => "avg";
8783
}
8884

8985
public sealed partial class AverageAggregationDescriptor<T> : DescriptorBase<AverageAggregationDescriptor<T>>

src/Elastic.Clients.Elasticsearch/_Generated/Types/Aggregations/AverageBucketAggregation.g.cs

+8-12
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,6 @@ public override void Write(Utf8JsonWriter writer, AverageBucketAggregation value
3838
writer.WriteStartObject();
3939
writer.WritePropertyName("avg_bucket");
4040
writer.WriteStartObject();
41-
writer.WriteEndObject();
42-
if (value.Meta is not null)
43-
{
44-
writer.WritePropertyName("meta");
45-
JsonSerializer.Serialize(writer, value.Meta, options);
46-
}
47-
4841
if (value.BucketsPath is not null)
4942
{
5043
writer.WritePropertyName("buckets_path");
@@ -63,20 +56,23 @@ public override void Write(Utf8JsonWriter writer, AverageBucketAggregation value
6356
JsonSerializer.Serialize(writer, value.GapPolicy, options);
6457
}
6558

59+
writer.WriteEndObject();
60+
if (value.Meta is not null)
61+
{
62+
writer.WritePropertyName("meta");
63+
JsonSerializer.Serialize(writer, value.Meta, options);
64+
}
65+
6666
writer.WriteEndObject();
6767
}
6868
}
6969

7070
[JsonConverter(typeof(AverageBucketAggregationConverter))]
71-
public partial class AverageBucketAggregation : Aggregations.PipelineAggregationBase, IAggregationContainerVariant
71+
public partial class AverageBucketAggregation : Aggregations.PipelineAggregationBase
7272
{
73-
[JsonConstructor]
7473
public AverageBucketAggregation(string name) : base(name)
7574
{
7675
}
77-
78-
[JsonIgnore]
79-
string Aggregations.IAggregationContainerVariant.AggregationContainerVariantName => "avg_bucket";
8076
}
8177

8278
public sealed partial class AverageBucketAggregationDescriptor : DescriptorBase<AverageBucketAggregationDescriptor>

src/Elastic.Clients.Elasticsearch/_Generated/Types/Aggregations/BoxplotAggregation.g.cs

+8-11
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,6 @@ public override void Write(Utf8JsonWriter writer, BoxplotAggregation value, Json
3838
writer.WriteStartObject();
3939
writer.WritePropertyName("boxplot");
4040
writer.WriteStartObject();
41-
writer.WriteEndObject();
42-
if (value.Meta is not null)
43-
{
44-
writer.WritePropertyName("meta");
45-
JsonSerializer.Serialize(writer, value.Meta, options);
46-
}
47-
4841
if (value.Compression.HasValue)
4942
{
5043
writer.WritePropertyName("compression");
@@ -69,21 +62,25 @@ public override void Write(Utf8JsonWriter writer, BoxplotAggregation value, Json
6962
JsonSerializer.Serialize(writer, value.Script, options);
7063
}
7164

65+
writer.WriteEndObject();
66+
if (value.Meta is not null)
67+
{
68+
writer.WritePropertyName("meta");
69+
JsonSerializer.Serialize(writer, value.Meta, options);
70+
}
71+
7272
writer.WriteEndObject();
7373
}
7474
}
7575

7676
[JsonConverter(typeof(BoxplotAggregationConverter))]
77-
public partial class BoxplotAggregation : Aggregations.MetricAggregationBase, IAggregationContainerVariant
77+
public partial class BoxplotAggregation : Aggregations.MetricAggregationBase
7878
{
7979
public BoxplotAggregation(string name, Field field) : base(name) => Field = field;
80-
[JsonConstructor]
8180
public BoxplotAggregation(string name) : base(name)
8281
{
8382
}
8483

85-
[JsonIgnore]
86-
string Aggregations.IAggregationContainerVariant.AggregationContainerVariantName => "boxplot";
8784
[JsonInclude]
8885
[JsonPropertyName("compression")]
8986
public double? Compression { get; set; }

src/Elastic.Clients.Elasticsearch/_Generated/Types/Aggregations/BucketScriptAggregation.g.cs

+8-11
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,6 @@ public override void Write(Utf8JsonWriter writer, BucketScriptAggregation value,
3838
writer.WriteStartObject();
3939
writer.WritePropertyName("bucket_script");
4040
writer.WriteStartObject();
41-
writer.WriteEndObject();
42-
if (value.Meta is not null)
43-
{
44-
writer.WritePropertyName("meta");
45-
JsonSerializer.Serialize(writer, value.Meta, options);
46-
}
47-
4841
if (value.Script is not null)
4942
{
5043
writer.WritePropertyName("script");
@@ -69,20 +62,24 @@ public override void Write(Utf8JsonWriter writer, BucketScriptAggregation value,
6962
JsonSerializer.Serialize(writer, value.GapPolicy, options);
7063
}
7164

65+
writer.WriteEndObject();
66+
if (value.Meta is not null)
67+
{
68+
writer.WritePropertyName("meta");
69+
JsonSerializer.Serialize(writer, value.Meta, options);
70+
}
71+
7272
writer.WriteEndObject();
7373
}
7474
}
7575

7676
[JsonConverter(typeof(BucketScriptAggregationConverter))]
77-
public partial class BucketScriptAggregation : Aggregations.PipelineAggregationBase, IAggregationContainerVariant
77+
public partial class BucketScriptAggregation : Aggregations.PipelineAggregationBase
7878
{
79-
[JsonConstructor]
8079
public BucketScriptAggregation(string name) : base(name)
8180
{
8281
}
8382

84-
[JsonIgnore]
85-
string Aggregations.IAggregationContainerVariant.AggregationContainerVariantName => "bucket_script";
8683
[JsonInclude]
8784
[JsonPropertyName("script")]
8885
public Elastic.Clients.Elasticsearch.Script? Script { get; set; }

0 commit comments

Comments
 (0)