diff --git a/src/Elastic.Clients.Elasticsearch/Core/IEnumStruct.cs b/src/Elastic.Clients.Elasticsearch/Core/IEnumStruct.cs new file mode 100644 index 00000000000..0fc170344fe --- /dev/null +++ b/src/Elastic.Clients.Elasticsearch/Core/IEnumStruct.cs @@ -0,0 +1,11 @@ +// 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. + +namespace Elastic.Clients.Elasticsearch.Core; + +internal interface IEnumStruct where TSelf : struct, IEnumStruct +{ + // TODO: Can be made static when targeting .NET 7 and higher + TSelf Create(string value); +} diff --git a/src/Elastic.Clients.Elasticsearch/Serialization/EnumStructConverter.cs b/src/Elastic.Clients.Elasticsearch/Serialization/EnumStructConverter.cs index b7f8643de00..7bfb00d91dc 100644 --- a/src/Elastic.Clients.Elasticsearch/Serialization/EnumStructConverter.cs +++ b/src/Elastic.Clients.Elasticsearch/Serialization/EnumStructConverter.cs @@ -3,24 +3,18 @@ // See the LICENSE file in the project root for more information. using System; -using System.Reflection; using System.Text.Json; using System.Text.Json.Serialization; +using Elastic.Clients.Elasticsearch.Core; namespace Elastic.Clients.Elasticsearch.Serialization; -internal sealed class EnumStructConverter : JsonConverter where T : new() +internal sealed class EnumStructConverter : JsonConverter where T : struct, IEnumStruct { - public override T? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + public override T Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { var value = reader.GetString(); - - var instance = (T)Activator.CreateInstance( - typeof(T), - BindingFlags.Instance | BindingFlags.NonPublic, - args: new object[] { value }, // TODO: Perf - Review use of ArrayPool - binder: null, - culture: null)!; + var instance = default(T).Create(value); return instance; } @@ -30,7 +24,7 @@ public override void Write(Utf8JsonWriter writer, T value, JsonSerializerOptions var enumValue = value.ToString(); if (!string.IsNullOrEmpty(enumValue)) - writer.WriteStringValue(value.ToString()); + writer.WriteStringValue(enumValue); else writer.WriteNullValue(); } diff --git a/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.Aggregations.g.cs b/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.Aggregations.g.cs index 22eb8d0a1e2..c875fc18a4d 100644 --- a/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.Aggregations.g.cs +++ b/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.Aggregations.g.cs @@ -22,6 +22,7 @@ using System.Text.Json.Serialization; using System.Runtime.Serialization; using Elastic.Transport; +using Elastic.Clients.Elasticsearch.Core; using Elastic.Clients.Elasticsearch.Serialization; namespace Elastic.Clients.Elasticsearch.Aggregations; diff --git a/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.Analysis.g.cs b/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.Analysis.g.cs index 72dc4d36027..674718cb84b 100644 --- a/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.Analysis.g.cs +++ b/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.Analysis.g.cs @@ -22,6 +22,7 @@ using System.Text.Json.Serialization; using System.Runtime.Serialization; using Elastic.Transport; +using Elastic.Clients.Elasticsearch.Core; using Elastic.Clients.Elasticsearch.Serialization; namespace Elastic.Clients.Elasticsearch.Analysis; diff --git a/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.Cluster.g.cs b/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.Cluster.g.cs index 1e1c6daee28..cf960255b31 100644 --- a/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.Cluster.g.cs +++ b/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.Cluster.g.cs @@ -22,6 +22,7 @@ using System.Text.Json.Serialization; using System.Runtime.Serialization; using Elastic.Transport; +using Elastic.Clients.Elasticsearch.Core; using Elastic.Clients.Elasticsearch.Serialization; namespace Elastic.Clients.Elasticsearch.Cluster; diff --git a/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.Core.Search.g.cs b/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.Core.Search.g.cs index 2a38d6aa359..e07af1efd30 100644 --- a/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.Core.Search.g.cs +++ b/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.Core.Search.g.cs @@ -22,6 +22,7 @@ using System.Text.Json.Serialization; using System.Runtime.Serialization; using Elastic.Transport; +using Elastic.Clients.Elasticsearch.Core; using Elastic.Clients.Elasticsearch.Serialization; namespace Elastic.Clients.Elasticsearch.Core.Search; @@ -225,10 +226,12 @@ public override void Write(Utf8JsonWriter writer, HighlighterTagsSchema value, J } [JsonConverter(typeof(EnumStructConverter))] -public readonly partial struct HighlighterType +public readonly partial struct HighlighterType : IEnumStruct { public HighlighterType(string value) => Value = value; + HighlighterType IEnumStruct.Create(string value) => value; + public readonly string Value { get; } public static HighlighterType Unified { get; } = new HighlighterType("unified"); public static HighlighterType Plain { get; } = new HighlighterType("plain"); diff --git a/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.Enrich.g.cs b/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.Enrich.g.cs index 6ff924c6261..fb650c44091 100644 --- a/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.Enrich.g.cs +++ b/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.Enrich.g.cs @@ -22,6 +22,7 @@ using System.Text.Json.Serialization; using System.Runtime.Serialization; using Elastic.Transport; +using Elastic.Clients.Elasticsearch.Core; using Elastic.Clients.Elasticsearch.Serialization; namespace Elastic.Clients.Elasticsearch.Enrich; diff --git a/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.Eql.g.cs b/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.Eql.g.cs index e6bbab0cf1b..a98d2cb204b 100644 --- a/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.Eql.g.cs +++ b/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.Eql.g.cs @@ -22,6 +22,7 @@ using System.Text.Json.Serialization; using System.Runtime.Serialization; using Elastic.Transport; +using Elastic.Clients.Elasticsearch.Core; using Elastic.Clients.Elasticsearch.Serialization; namespace Elastic.Clients.Elasticsearch.Eql; diff --git a/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.IndexManagement.g.cs b/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.IndexManagement.g.cs index 2cc9f975547..2f6af988ff0 100644 --- a/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.IndexManagement.g.cs +++ b/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.IndexManagement.g.cs @@ -22,6 +22,7 @@ using System.Text.Json.Serialization; using System.Runtime.Serialization; using Elastic.Transport; +using Elastic.Clients.Elasticsearch.Core; using Elastic.Clients.Elasticsearch.Serialization; namespace Elastic.Clients.Elasticsearch.IndexManagement; @@ -497,10 +498,12 @@ public override void Write(Utf8JsonWriter writer, ShardRoutingState value, JsonS } [JsonConverter(typeof(EnumStructConverter))] -public readonly partial struct StorageType +public readonly partial struct StorageType : IEnumStruct { public StorageType(string value) => Value = value; + StorageType IEnumStruct.Create(string value) => value; + public readonly string Value { get; } /// diff --git a/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.Ingest.g.cs b/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.Ingest.g.cs index a0868fe9cbf..c52d9590dc8 100644 --- a/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.Ingest.g.cs +++ b/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.Ingest.g.cs @@ -22,6 +22,7 @@ using System.Text.Json.Serialization; using System.Runtime.Serialization; using Elastic.Transport; +using Elastic.Clients.Elasticsearch.Core; using Elastic.Clients.Elasticsearch.Serialization; namespace Elastic.Clients.Elasticsearch.Ingest; diff --git a/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.Mapping.g.cs b/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.Mapping.g.cs index 4d0568d2b37..a2f680310ca 100644 --- a/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.Mapping.g.cs +++ b/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.Mapping.g.cs @@ -22,6 +22,7 @@ using System.Text.Json.Serialization; using System.Runtime.Serialization; using Elastic.Transport; +using Elastic.Clients.Elasticsearch.Core; using Elastic.Clients.Elasticsearch.Serialization; namespace Elastic.Clients.Elasticsearch.Mapping; diff --git a/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.Ml.g.cs b/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.Ml.g.cs index 6c6ec49b1ad..cb41aa33204 100644 --- a/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.Ml.g.cs +++ b/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.Ml.g.cs @@ -22,6 +22,7 @@ using System.Text.Json.Serialization; using System.Runtime.Serialization; using Elastic.Transport; +using Elastic.Clients.Elasticsearch.Core; using Elastic.Clients.Elasticsearch.Serialization; namespace Elastic.Clients.Elasticsearch.Ml; diff --git a/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.NoNamespace.g.cs b/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.NoNamespace.g.cs index 73b5673c910..176ffac3c03 100644 --- a/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.NoNamespace.g.cs +++ b/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.NoNamespace.g.cs @@ -22,6 +22,7 @@ using System.Text.Json.Serialization; using System.Runtime.Serialization; using Elastic.Transport; +using Elastic.Clients.Elasticsearch.Core; using Elastic.Clients.Elasticsearch.Serialization; namespace Elastic.Clients.Elasticsearch; @@ -997,10 +998,12 @@ public override void Write(Utf8JsonWriter writer, Result value, JsonSerializerOp } [JsonConverter(typeof(EnumStructConverter))] -public readonly partial struct ScriptLanguage +public readonly partial struct ScriptLanguage : IEnumStruct { public ScriptLanguage(string value) => Value = value; + ScriptLanguage IEnumStruct.Create(string value) => value; + public readonly string Value { get; } public static ScriptLanguage Painless { get; } = new ScriptLanguage("painless"); public static ScriptLanguage Mustache { get; } = new ScriptLanguage("mustache"); diff --git a/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.QueryDsl.g.cs b/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.QueryDsl.g.cs index e8389a3fedf..4c8953c24d5 100644 --- a/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.QueryDsl.g.cs +++ b/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.QueryDsl.g.cs @@ -22,6 +22,7 @@ using System.Text.Json.Serialization; using System.Runtime.Serialization; using Elastic.Transport; +using Elastic.Clients.Elasticsearch.Core; using Elastic.Clients.Elasticsearch.Serialization; namespace Elastic.Clients.Elasticsearch.QueryDsl; diff --git a/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.Tasks.g.cs b/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.Tasks.g.cs index 0f497b1f0c2..9f028290d39 100644 --- a/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.Tasks.g.cs +++ b/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.Tasks.g.cs @@ -22,6 +22,7 @@ using System.Text.Json.Serialization; using System.Runtime.Serialization; using Elastic.Transport; +using Elastic.Clients.Elasticsearch.Core; using Elastic.Clients.Elasticsearch.Serialization; namespace Elastic.Clients.Elasticsearch.Tasks; diff --git a/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.Watcher.g.cs b/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.Watcher.g.cs index 70296f8bf2a..8e4ac760eba 100644 --- a/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.Watcher.g.cs +++ b/src/Elastic.Clients.Elasticsearch/_Generated/Types/Enums/Enums.Watcher.g.cs @@ -22,6 +22,7 @@ using System.Text.Json.Serialization; using System.Runtime.Serialization; using Elastic.Transport; +using Elastic.Clients.Elasticsearch.Core; using Elastic.Clients.Elasticsearch.Serialization; namespace Elastic.Clients.Elasticsearch.Watcher;