Skip to content

Commit 4e18b84

Browse files
committed
Improve enum and request (de-)serialization
1 parent 0a6739e commit 4e18b84

Some content is hidden

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

49 files changed

+4532
-488
lines changed

src/Elastic.Clients.Elasticsearch.Shared/Api/Extensions/CreateIndexRequestDescriptorExtensions.cs

-53
This file was deleted.

src/Elastic.Clients.Elasticsearch/_Generated/Api/CreateRequest.g.cs

+32-20
Original file line numberDiff line numberDiff line change
@@ -87,14 +87,45 @@ public sealed partial class CreateRequestParameters : RequestParameters
8787
public Elastic.Clients.Elasticsearch.WaitForActiveShards? WaitForActiveShards { get => Q<Elastic.Clients.Elasticsearch.WaitForActiveShards?>("wait_for_active_shards"); set => Q("wait_for_active_shards", value); }
8888
}
8989

90+
internal sealed partial class CreateRequestConverter<TDocument> : System.Text.Json.Serialization.JsonConverter<CreateRequest<TDocument>>
91+
{
92+
public override CreateRequest<TDocument> Read(ref System.Text.Json.Utf8JsonReader reader, System.Type typeToConvert, System.Text.Json.JsonSerializerOptions options)
93+
{
94+
return new CreateRequest<TDocument> { Document = reader.ReadValue<TDocument>(options, typeof(SourceMarker<TDocument>)) };
95+
}
96+
97+
public override void Write(System.Text.Json.Utf8JsonWriter writer, CreateRequest<TDocument> value, System.Text.Json.JsonSerializerOptions options)
98+
{
99+
writer.WriteValue(options, value.Document, typeof(SourceMarker<TDocument>));
100+
}
101+
}
102+
103+
internal sealed partial class CreateRequestConverterFactory : System.Text.Json.Serialization.JsonConverterFactory
104+
{
105+
public override bool CanConvert(System.Type typeToConvert)
106+
{
107+
return typeToConvert.IsGenericType && typeToConvert.GetGenericTypeDefinition() == typeof(CreateRequest<>);
108+
}
109+
110+
public override System.Text.Json.Serialization.JsonConverter CreateConverter(System.Type typeToConvert, System.Text.Json.JsonSerializerOptions options)
111+
{
112+
var args = typeToConvert.GetGenericArguments();
113+
#pragma warning disable IL3050
114+
var converter = (System.Text.Json.Serialization.JsonConverter)System.Activator.CreateInstance(typeof(CreateRequestConverter<>).MakeGenericType(args[0]), System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public, binder: null, args: null, culture: null)!;
115+
#pragma warning restore IL3050
116+
return converter;
117+
}
118+
}
119+
90120
/// <summary>
91121
/// <para>
92122
/// Index a document.
93123
/// Adds a JSON document to the specified data stream or index and makes it searchable.
94124
/// If the target is an index and the document already exists, the request updates the document and increments its version.
95125
/// </para>
96126
/// </summary>
97-
public sealed partial class CreateRequest<TDocument> : PlainRequest<CreateRequestParameters>, ISelfTwoWaySerializable
127+
[JsonConverter(typeof(CreateRequestConverterFactory))]
128+
public sealed partial class CreateRequest<TDocument> : PlainRequest<CreateRequestParameters>
98129
{
99130
public CreateRequest(Elastic.Clients.Elasticsearch.IndexName index, Elastic.Clients.Elasticsearch.Id id) : base(r => r.Required("index", index).Required("id", id))
100131
{
@@ -118,7 +149,6 @@ internal CreateRequest()
118149
/// Unique identifier for the document.
119150
/// </para>
120151
/// </summary>
121-
[JsonIgnore]
122152
public Elastic.Clients.Elasticsearch.Id Id { get => P<Elastic.Clients.Elasticsearch.Id>("id"); set => PR("id", value); }
123153

124154
/// <summary>
@@ -128,7 +158,6 @@ internal CreateRequest()
128158
/// If the target doesn’t exist and doesn’t match a data stream template, this request creates the index.
129159
/// </para>
130160
/// </summary>
131-
[JsonIgnore]
132161
public Elastic.Clients.Elasticsearch.IndexName Index { get => P<Elastic.Clients.Elasticsearch.IndexName>("index"); set => PR("index", value); }
133162

134163
/// <summary>
@@ -138,7 +167,6 @@ internal CreateRequest()
138167
/// If a final pipeline is configured it will always run, regardless of the value of this parameter.
139168
/// </para>
140169
/// </summary>
141-
[JsonIgnore]
142170
public string? Pipeline { get => Q<string?>("pipeline"); set => Q("pipeline", value); }
143171

144172
/// <summary>
@@ -147,23 +175,20 @@ internal CreateRequest()
147175
/// Valid values: <c>true</c>, <c>false</c>, <c>wait_for</c>.
148176
/// </para>
149177
/// </summary>
150-
[JsonIgnore]
151178
public Elastic.Clients.Elasticsearch.Refresh? Refresh { get => Q<Elastic.Clients.Elasticsearch.Refresh?>("refresh"); set => Q("refresh", value); }
152179

153180
/// <summary>
154181
/// <para>
155182
/// Custom value used to route operations to a specific shard.
156183
/// </para>
157184
/// </summary>
158-
[JsonIgnore]
159185
public Elastic.Clients.Elasticsearch.Routing? Routing { get => Q<Elastic.Clients.Elasticsearch.Routing?>("routing"); set => Q("routing", value); }
160186

161187
/// <summary>
162188
/// <para>
163189
/// Period the request waits for the following operations: automatic index creation, dynamic mapping updates, waiting for active shards.
164190
/// </para>
165191
/// </summary>
166-
[JsonIgnore]
167192
public Elastic.Clients.Elasticsearch.Duration? Timeout { get => Q<Elastic.Clients.Elasticsearch.Duration?>("timeout"); set => Q("timeout", value); }
168193

169194
/// <summary>
@@ -172,15 +197,13 @@ internal CreateRequest()
172197
/// The specified version must match the current version of the document for the request to succeed.
173198
/// </para>
174199
/// </summary>
175-
[JsonIgnore]
176200
public long? Version { get => Q<long?>("version"); set => Q("version", value); }
177201

178202
/// <summary>
179203
/// <para>
180204
/// Specific version type: <c>external</c>, <c>external_gte</c>.
181205
/// </para>
182206
/// </summary>
183-
[JsonIgnore]
184207
public Elastic.Clients.Elasticsearch.VersionType? VersionType { get => Q<Elastic.Clients.Elasticsearch.VersionType?>("version_type"); set => Q("version_type", value); }
185208

186209
/// <summary>
@@ -189,19 +212,8 @@ internal CreateRequest()
189212
/// Set to <c>all</c> or any positive integer up to the total number of shards in the index (<c>number_of_replicas+1</c>).
190213
/// </para>
191214
/// </summary>
192-
[JsonIgnore]
193215
public Elastic.Clients.Elasticsearch.WaitForActiveShards? WaitForActiveShards { get => Q<Elastic.Clients.Elasticsearch.WaitForActiveShards?>("wait_for_active_shards"); set => Q("wait_for_active_shards", value); }
194216
public TDocument Document { get; set; }
195-
196-
void ISelfTwoWaySerializable.Serialize(Utf8JsonWriter writer, JsonSerializerOptions options, IElasticsearchClientSettings settings)
197-
{
198-
settings.SourceSerializer.Serialize(Document, writer);
199-
}
200-
201-
void ISelfTwoWaySerializable.Deserialize(ref Utf8JsonReader reader, JsonSerializerOptions options, IElasticsearchClientSettings settings)
202-
{
203-
Document = settings.SourceSerializer.Deserialize<TDocument>(ref reader);
204-
}
205217
}
206218

207219
/// <summary>

src/Elastic.Clients.Elasticsearch/_Generated/Api/IndexManagement/DownsampleRequest.g.cs

+15-13
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,19 @@ public sealed partial class DownsampleRequestParameters : RequestParameters
3434
{
3535
}
3636

37+
internal sealed partial class DownsampleRequestConverter : System.Text.Json.Serialization.JsonConverter<DownsampleRequest>
38+
{
39+
public override DownsampleRequest Read(ref System.Text.Json.Utf8JsonReader reader, System.Type typeToConvert, System.Text.Json.JsonSerializerOptions options)
40+
{
41+
return new DownsampleRequest { Config = reader.ReadValue<Elastic.Clients.Elasticsearch.IndexManagement.DownsampleConfig>(options) };
42+
}
43+
44+
public override void Write(System.Text.Json.Utf8JsonWriter writer, DownsampleRequest value, System.Text.Json.JsonSerializerOptions options)
45+
{
46+
writer.WriteValue(options, value.Config);
47+
}
48+
}
49+
3750
/// <summary>
3851
/// <para>
3952
/// Downsample an index.
@@ -47,7 +60,8 @@ public sealed partial class DownsampleRequestParameters : RequestParameters
4760
/// The source index must be read only (<c>index.blocks.write: true</c>).
4861
/// </para>
4962
/// </summary>
50-
public sealed partial class DownsampleRequest : PlainRequest<DownsampleRequestParameters>, ISelfTwoWaySerializable
63+
[JsonConverter(typeof(DownsampleRequestConverter))]
64+
public sealed partial class DownsampleRequest : PlainRequest<DownsampleRequestParameters>
5165
{
5266
public DownsampleRequest(Elastic.Clients.Elasticsearch.IndexName index, Elastic.Clients.Elasticsearch.IndexName targetIndex) : base(r => r.Required("index", index).Required("target_index", targetIndex))
5367
{
@@ -71,27 +85,15 @@ internal DownsampleRequest()
7185
/// Name of the time series index to downsample.
7286
/// </para>
7387
/// </summary>
74-
[JsonIgnore]
7588
public Elastic.Clients.Elasticsearch.IndexName Index { get => P<Elastic.Clients.Elasticsearch.IndexName>("index"); set => PR("index", value); }
7689

7790
/// <summary>
7891
/// <para>
7992
/// Name of the index to create.
8093
/// </para>
8194
/// </summary>
82-
[JsonIgnore]
8395
public Elastic.Clients.Elasticsearch.IndexName TargetIndex { get => P<Elastic.Clients.Elasticsearch.IndexName>("target_index"); set => PR("target_index", value); }
8496
public Elastic.Clients.Elasticsearch.IndexManagement.DownsampleConfig Config { get; set; }
85-
86-
void ISelfTwoWaySerializable.Serialize(Utf8JsonWriter writer, JsonSerializerOptions options, IElasticsearchClientSettings settings)
87-
{
88-
JsonSerializer.Serialize(writer, Config, options);
89-
}
90-
91-
void ISelfTwoWaySerializable.Deserialize(ref Utf8JsonReader reader, JsonSerializerOptions options, IElasticsearchClientSettings settings)
92-
{
93-
Config = settings.RequestResponseSerializer.Deserialize<Elastic.Clients.Elasticsearch.IndexManagement.DownsampleConfig>(ref reader);
94-
}
9597
}
9698

9799
/// <summary>

src/Elastic.Clients.Elasticsearch/_Generated/Api/IndexManagement/PutDataLifecycleRequest.g.cs

+15-15
Original file line numberDiff line numberDiff line change
@@ -59,13 +59,27 @@ public sealed partial class PutDataLifecycleRequestParameters : RequestParameter
5959
public Elastic.Clients.Elasticsearch.Duration? Timeout { get => Q<Elastic.Clients.Elasticsearch.Duration?>("timeout"); set => Q("timeout", value); }
6060
}
6161

62+
internal sealed partial class PutDataLifecycleRequestConverter : System.Text.Json.Serialization.JsonConverter<PutDataLifecycleRequest>
63+
{
64+
public override PutDataLifecycleRequest Read(ref System.Text.Json.Utf8JsonReader reader, System.Type typeToConvert, System.Text.Json.JsonSerializerOptions options)
65+
{
66+
return new PutDataLifecycleRequest { Lifecycle = reader.ReadValue<Elastic.Clients.Elasticsearch.IndexManagement.DataStreamLifecycle>(options) };
67+
}
68+
69+
public override void Write(System.Text.Json.Utf8JsonWriter writer, PutDataLifecycleRequest value, System.Text.Json.JsonSerializerOptions options)
70+
{
71+
writer.WriteValue(options, value.Lifecycle);
72+
}
73+
}
74+
6275
/// <summary>
6376
/// <para>
6477
/// Update data stream lifecycles.
6578
/// Update the data stream lifecycle of the specified data streams.
6679
/// </para>
6780
/// </summary>
68-
public sealed partial class PutDataLifecycleRequest : PlainRequest<PutDataLifecycleRequestParameters>, ISelfTwoWaySerializable
81+
[JsonConverter(typeof(PutDataLifecycleRequestConverter))]
82+
public sealed partial class PutDataLifecycleRequest : PlainRequest<PutDataLifecycleRequestParameters>
6983
{
7084
public PutDataLifecycleRequest(Elastic.Clients.Elasticsearch.DataStreamNames name) : base(r => r.Required("name", name))
7185
{
@@ -91,7 +105,6 @@ internal PutDataLifecycleRequest()
91105
/// To target all data streams use <c>*</c> or <c>_all</c>.
92106
/// </para>
93107
/// </summary>
94-
[JsonIgnore]
95108
public Elastic.Clients.Elasticsearch.DataStreamNames Name { get => P<Elastic.Clients.Elasticsearch.DataStreamNames>("name"); set => PR("name", value); }
96109

97110
/// <summary>
@@ -101,7 +114,6 @@ internal PutDataLifecycleRequest()
101114
/// Valid values are: <c>all</c>, <c>hidden</c>, <c>open</c>, <c>closed</c>, <c>none</c>.
102115
/// </para>
103116
/// </summary>
104-
[JsonIgnore]
105117
public ICollection<Elastic.Clients.Elasticsearch.ExpandWildcard>? ExpandWildcards { get => Q<ICollection<Elastic.Clients.Elasticsearch.ExpandWildcard>?>("expand_wildcards"); set => Q("expand_wildcards", value); }
106118

107119
/// <summary>
@@ -111,7 +123,6 @@ internal PutDataLifecycleRequest()
111123
/// error.
112124
/// </para>
113125
/// </summary>
114-
[JsonIgnore]
115126
public Elastic.Clients.Elasticsearch.Duration? MasterTimeout { get => Q<Elastic.Clients.Elasticsearch.Duration?>("master_timeout"); set => Q("master_timeout", value); }
116127

117128
/// <summary>
@@ -120,19 +131,8 @@ internal PutDataLifecycleRequest()
120131
/// If no response is received before the timeout expires, the request fails and returns an error.
121132
/// </para>
122133
/// </summary>
123-
[JsonIgnore]
124134
public Elastic.Clients.Elasticsearch.Duration? Timeout { get => Q<Elastic.Clients.Elasticsearch.Duration?>("timeout"); set => Q("timeout", value); }
125135
public Elastic.Clients.Elasticsearch.IndexManagement.DataStreamLifecycle Lifecycle { get; set; }
126-
127-
void ISelfTwoWaySerializable.Serialize(Utf8JsonWriter writer, JsonSerializerOptions options, IElasticsearchClientSettings settings)
128-
{
129-
JsonSerializer.Serialize(writer, Lifecycle, options);
130-
}
131-
132-
void ISelfTwoWaySerializable.Deserialize(ref Utf8JsonReader reader, JsonSerializerOptions options, IElasticsearchClientSettings settings)
133-
{
134-
Lifecycle = settings.RequestResponseSerializer.Deserialize<Elastic.Clients.Elasticsearch.IndexManagement.DataStreamLifecycle>(ref reader);
135-
}
136136
}
137137

138138
/// <summary>

0 commit comments

Comments
 (0)