Skip to content

Commit

Permalink
Improve serialization
Browse files Browse the repository at this point in the history
  • Loading branch information
flobernd committed Jan 28, 2025
1 parent f13c767 commit e2ea08a
Show file tree
Hide file tree
Showing 851 changed files with 62,019 additions and 22,195 deletions.
7 changes: 0 additions & 7 deletions Elasticsearch.sln
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tests.ClusterLauncher", "te
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elastic.Clients.Elasticsearch.JsonNetSerializer", "src\Elastic.Clients.Elasticsearch.JsonNetSerializer\Elastic.Clients.Elasticsearch.JsonNetSerializer.csproj", "{8C9275D9-29CE-4A20-8FD5-6B26C6CAAADB}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elastic.Clients.Elasticsearch.Serverless", "src\Elastic.Clients.Elasticsearch.Serverless\Elastic.Clients.Elasticsearch.Serverless.csproj", "{49D7F5A7-AA32-492B-B957-0E3325861F55}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tests", "tests\Tests\Tests.csproj", "{6FD804B2-CE80-41CB-A411-2023F34C18FE}"
EndProject
Global
Expand Down Expand Up @@ -107,10 +105,6 @@ Global
{8C9275D9-29CE-4A20-8FD5-6B26C6CAAADB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8C9275D9-29CE-4A20-8FD5-6B26C6CAAADB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8C9275D9-29CE-4A20-8FD5-6B26C6CAAADB}.Release|Any CPU.Build.0 = Release|Any CPU
{49D7F5A7-AA32-492B-B957-0E3325861F55}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{49D7F5A7-AA32-492B-B957-0E3325861F55}.Debug|Any CPU.Build.0 = Debug|Any CPU
{49D7F5A7-AA32-492B-B957-0E3325861F55}.Release|Any CPU.ActiveCfg = Release|Any CPU
{49D7F5A7-AA32-492B-B957-0E3325861F55}.Release|Any CPU.Build.0 = Release|Any CPU
{6FD804B2-CE80-41CB-A411-2023F34C18FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6FD804B2-CE80-41CB-A411-2023F34C18FE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6FD804B2-CE80-41CB-A411-2023F34C18FE}.Release|Any CPU.ActiveCfg = Release|Any CPU
Expand All @@ -130,7 +124,6 @@ Global
{68D1BFDC-F447-4D2C-AF81-537807636610} = {1FE49D14-216A-41EE-A177-E42BFF53E0DC}
{F6162603-D134-4121-8106-2BA4DAD7350B} = {362B2776-4B29-46AB-B237-56776B5372B6}
{8C9275D9-29CE-4A20-8FD5-6B26C6CAAADB} = {D455EC79-E1E0-4509-B297-0DA3AED8DFF7}
{49D7F5A7-AA32-492B-B957-0E3325861F55} = {D455EC79-E1E0-4509-B297-0DA3AED8DFF7}
{6FD804B2-CE80-41CB-A411-2023F34C18FE} = {362B2776-4B29-46AB-B237-56776B5372B6}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
Expand Down
104 changes: 104 additions & 0 deletions src/Elastic.Clients.Elasticsearch/Api/Temp.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
// Licensed to Elasticsearch B.V under one or more agreements.
// Elasticsearch B.V licenses this file to you under the Apache 2.0 License.
// See the LICENSE file in the project root for more information.

// Contains internal parameterless constructors used by the deserializer.

namespace Elastic.Clients.Elasticsearch.Eql
{
public partial class EqlSearchRequest
{
internal EqlSearchRequest()
{ }
}
}

namespace Elastic.Clients.Elasticsearch.IndexManagement
{
public partial class PutMappingRequest
{
internal PutMappingRequest()
{ }
}
}

namespace Elastic.Clients.Elasticsearch.IndexManagement
{
public partial class PutTemplateRequest
{
internal PutTemplateRequest()
{ }
}
}

namespace Elastic.Clients.Elasticsearch.Inference
{
public partial class InferenceRequest
{
internal InferenceRequest()
{ }
}
}

namespace Elastic.Clients.Elasticsearch.QueryRules
{
public partial class PutRuleRequest
{
internal PutRuleRequest()
{ }
}
}

namespace Elastic.Clients.Elasticsearch.QueryRules
{
public partial class PutRulesetRequest
{
internal PutRulesetRequest()
{ }
}
}

namespace Elastic.Clients.Elasticsearch
{
public partial class SearchMvtRequest
{
internal SearchMvtRequest()
{ }
}
}

namespace Elastic.Clients.Elasticsearch.Snapshot
{
public partial class CreateSnapshotRequest
{
internal CreateSnapshotRequest()
{ }
}
}

namespace Elastic.Clients.Elasticsearch.Synonyms
{
public partial class PutSynonymRequest
{
internal PutSynonymRequest()
{ }
}
}

namespace Elastic.Clients.Elasticsearch
{
public partial class TermVectorsRequest<TDocument>
{
internal TermVectorsRequest()
{ }
}
}

namespace Elastic.Clients.Elasticsearch
{
public sealed partial class UpdateRequest<TDocument, TPartialDocument>
{
internal UpdateRequest()
{ }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,14 @@
<CheckForOverflowUnderflow>true</CheckForOverflowUnderflow>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<Nullable>annotations</Nullable>
<PolySharpIncludeRuntimeSupportedAttributes>true</PolySharpIncludeRuntimeSupportedAttributes>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Elastic.Transport" Version="0.5.7" />
<PackageReference Include="PolySharp" Version="1.15.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>
<ItemGroup>
<InternalsVisibleTo Include="Tests" Key="$(ExposedPublicKey)" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,161 @@
#nullable restore

using Elastic.Clients.Elasticsearch.Fluent;
using Elastic.Clients.Elasticsearch.Next;
using Elastic.Clients.Elasticsearch.Serialization;
using Elastic.Transport.Products.Elasticsearch;
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Text.Json;
using System.Text.Json.Serialization;

namespace Elastic.Clients.Elasticsearch.AsyncSearch;

internal sealed partial class AsyncSearchStatusResponseConverter : System.Text.Json.Serialization.JsonConverter<AsyncSearchStatusResponse>
{
private static readonly System.Text.Json.JsonEncodedText PropClusters = System.Text.Json.JsonEncodedText.Encode("_clusters");
private static readonly System.Text.Json.JsonEncodedText PropCompletionStatus = System.Text.Json.JsonEncodedText.Encode("completion_status");
private static readonly System.Text.Json.JsonEncodedText PropCompletionTime = System.Text.Json.JsonEncodedText.Encode("completion_time");
private static readonly System.Text.Json.JsonEncodedText PropCompletionTimeInMillis = System.Text.Json.JsonEncodedText.Encode("completion_time_in_millis");
private static readonly System.Text.Json.JsonEncodedText PropExpirationTime = System.Text.Json.JsonEncodedText.Encode("expiration_time");
private static readonly System.Text.Json.JsonEncodedText PropExpirationTimeInMillis = System.Text.Json.JsonEncodedText.Encode("expiration_time_in_millis");
private static readonly System.Text.Json.JsonEncodedText PropId = System.Text.Json.JsonEncodedText.Encode("id");
private static readonly System.Text.Json.JsonEncodedText PropIsPartial = System.Text.Json.JsonEncodedText.Encode("is_partial");
private static readonly System.Text.Json.JsonEncodedText PropIsRunning = System.Text.Json.JsonEncodedText.Encode("is_running");
private static readonly System.Text.Json.JsonEncodedText PropShards = System.Text.Json.JsonEncodedText.Encode("_shards");
private static readonly System.Text.Json.JsonEncodedText PropStartTime = System.Text.Json.JsonEncodedText.Encode("start_time");
private static readonly System.Text.Json.JsonEncodedText PropStartTimeInMillis = System.Text.Json.JsonEncodedText.Encode("start_time_in_millis");

public override AsyncSearchStatusResponse Read(ref System.Text.Json.Utf8JsonReader reader, System.Type typeToConvert, System.Text.Json.JsonSerializerOptions options)
{
reader.ValidateToken(System.Text.Json.JsonTokenType.StartObject);
LocalJsonProperty<Elastic.Clients.Elasticsearch.ClusterStatistics?> propClusters = default;
LocalJsonProperty<int?> propCompletionStatus = default;
LocalJsonProperty<DateTimeOffset?> propCompletionTime = default;
LocalJsonProperty<long?> propCompletionTimeInMillis = default;
LocalJsonProperty<DateTimeOffset?> propExpirationTime = default;
LocalJsonProperty<long> propExpirationTimeInMillis = default;
LocalJsonProperty<string?> propId = default;
LocalJsonProperty<bool> propIsPartial = default;
LocalJsonProperty<bool> propIsRunning = default;
LocalJsonProperty<Elastic.Clients.Elasticsearch.ShardStatistics> propShards = default;
LocalJsonProperty<DateTimeOffset?> propStartTime = default;
LocalJsonProperty<long> propStartTimeInMillis = default;
while (reader.Read() && reader.TokenType is System.Text.Json.JsonTokenType.PropertyName)
{
if (propClusters.TryRead(ref reader, options, PropClusters))
{
continue;
}

if (propCompletionStatus.TryRead(ref reader, options, PropCompletionStatus))
{
continue;
}

if (propCompletionTime.TryRead(ref reader, options, PropCompletionTime))
{
continue;
}

if (propCompletionTimeInMillis.TryRead(ref reader, options, PropCompletionTimeInMillis))
{
continue;
}

if (propExpirationTime.TryRead(ref reader, options, PropExpirationTime))
{
continue;
}

if (propExpirationTimeInMillis.TryRead(ref reader, options, PropExpirationTimeInMillis))
{
continue;
}

if (propId.TryRead(ref reader, options, PropId))
{
continue;
}

if (propIsPartial.TryRead(ref reader, options, PropIsPartial))
{
continue;
}

if (propIsRunning.TryRead(ref reader, options, PropIsRunning))
{
continue;
}

if (propShards.TryRead(ref reader, options, PropShards))
{
continue;
}

if (propStartTime.TryRead(ref reader, options, PropStartTime))
{
continue;
}

if (propStartTimeInMillis.TryRead(ref reader, options, PropStartTimeInMillis))
{
continue;
}

throw new System.Text.Json.JsonException($"Unknown JSON property '{reader.GetString()}' for type '{typeToConvert.Name}'.");
}

reader.ValidateToken(System.Text.Json.JsonTokenType.EndObject);
return new AsyncSearchStatusResponse
{
Clusters = propClusters.Value
,
CompletionStatus = propCompletionStatus.Value
,
CompletionTime = propCompletionTime.Value
,
CompletionTimeInMillis = propCompletionTimeInMillis.Value
,
ExpirationTime = propExpirationTime.Value
,
ExpirationTimeInMillis = propExpirationTimeInMillis.Value
,
Id = propId.Value
,
IsPartial = propIsPartial.Value
,
IsRunning = propIsRunning.Value
,
Shards = propShards.Value
,
StartTime = propStartTime.Value
,
StartTimeInMillis = propStartTimeInMillis.Value
};
}

public override void Write(System.Text.Json.Utf8JsonWriter writer, AsyncSearchStatusResponse value, System.Text.Json.JsonSerializerOptions options)
{
writer.WriteStartObject();
writer.WriteProperty(options, PropClusters, value.Clusters);
writer.WriteProperty(options, PropCompletionStatus, value.CompletionStatus);
writer.WriteProperty(options, PropCompletionTime, value.CompletionTime);
writer.WriteProperty(options, PropCompletionTimeInMillis, value.CompletionTimeInMillis);
writer.WriteProperty(options, PropExpirationTime, value.ExpirationTime);
writer.WriteProperty(options, PropExpirationTimeInMillis, value.ExpirationTimeInMillis);
writer.WriteProperty(options, PropId, value.Id);
writer.WriteProperty(options, PropIsPartial, value.IsPartial);
writer.WriteProperty(options, PropIsRunning, value.IsRunning);
writer.WriteProperty(options, PropShards, value.Shards);
writer.WriteProperty(options, PropStartTime, value.StartTime);
writer.WriteProperty(options, PropStartTimeInMillis, value.StartTimeInMillis);
writer.WriteEndObject();
}
}

[JsonConverter(typeof(AsyncSearchStatusResponseConverter))]
public sealed partial class AsyncSearchStatusResponse : ElasticsearchResponse
{
/// <summary>
Expand All @@ -34,7 +181,6 @@ public sealed partial class AsyncSearchStatusResponse : ElasticsearchResponse
/// Not shown for local-only searches.
/// </para>
/// </summary>
[JsonInclude, JsonPropertyName("_clusters")]
public Elastic.Clients.Elasticsearch.ClusterStatistics? Clusters { get; init; }

/// <summary>
Expand All @@ -44,7 +190,6 @@ public sealed partial class AsyncSearchStatusResponse : ElasticsearchResponse
/// 503 indicates that the async search was completed with an error.
/// </para>
/// </summary>
[JsonInclude, JsonPropertyName("completion_status")]
public int? CompletionStatus { get; init; }

/// <summary>
Expand All @@ -53,21 +198,16 @@ public sealed partial class AsyncSearchStatusResponse : ElasticsearchResponse
/// when the search has completed.
/// </para>
/// </summary>
[JsonInclude, JsonPropertyName("completion_time")]
public DateTimeOffset? CompletionTime { get; init; }
[JsonInclude, JsonPropertyName("completion_time_in_millis")]
public long? CompletionTimeInMillis { get; init; }

/// <summary>
/// <para>
/// Indicates when the async search will expire.
/// </para>
/// </summary>
[JsonInclude, JsonPropertyName("expiration_time")]
public DateTimeOffset? ExpirationTime { get; init; }
[JsonInclude, JsonPropertyName("expiration_time_in_millis")]
public long ExpirationTimeInMillis { get; init; }
[JsonInclude, JsonPropertyName("id")]
public string? Id { get; init; }

/// <summary>
Expand All @@ -76,7 +216,6 @@ public sealed partial class AsyncSearchStatusResponse : ElasticsearchResponse
/// While the query is running, <c>is_partial</c> is always set to <c>true</c>.
/// </para>
/// </summary>
[JsonInclude, JsonPropertyName("is_partial")]
public bool IsPartial { get; init; }

/// <summary>
Expand All @@ -85,18 +224,14 @@ public sealed partial class AsyncSearchStatusResponse : ElasticsearchResponse
/// NOTE: If the search failed after some shards returned their results or the node that is coordinating the async search dies, results may be partial even though <c>is_running</c> is <c>false</c>.
/// </para>
/// </summary>
[JsonInclude, JsonPropertyName("is_running")]
public bool IsRunning { get; init; }

/// <summary>
/// <para>
/// Indicates how many shards have run the query so far.
/// </para>
/// </summary>
[JsonInclude, JsonPropertyName("_shards")]
public Elastic.Clients.Elasticsearch.ShardStatistics Shards { get; init; }
[JsonInclude, JsonPropertyName("start_time")]
public DateTimeOffset? StartTime { get; init; }
[JsonInclude, JsonPropertyName("start_time_in_millis")]
public long StartTimeInMillis { get; init; }
}
Loading

0 comments on commit e2ea08a

Please sign in to comment.