From 6b635d9b1aa615fc24c4f4fbfaba68851c4bc61b Mon Sep 17 00:00:00 2001 From: Steve Gordon Date: Mon, 3 Oct 2022 14:04:09 +0100 Subject: [PATCH] Improve open enumeration code-gen (#6697) --- .../Serialization/StringAliasConverter.cs | 7 +--- .../Types/Enums/Enums.NoNamespace.g.cs | 42 +++++++++++++++---- .../_Generated/Types/Highlight.g.cs | 10 ++--- .../_Generated/Types/HighlightField.g.cs | 10 ++--- .../_Generated/Types/InlineScript.g.cs | 6 +-- .../_Generated/Types/LanguageContext.g.cs | 2 +- .../Security/RoleTemplateInlineScript.g.cs | 6 +-- .../_Generated/Types/StoredScript.g.cs | 6 +-- 8 files changed, 55 insertions(+), 34 deletions(-) diff --git a/src/Elastic.Clients.Elasticsearch/Serialization/StringAliasConverter.cs b/src/Elastic.Clients.Elasticsearch/Serialization/StringAliasConverter.cs index 511838e4504..c74bf7af716 100644 --- a/src/Elastic.Clients.Elasticsearch/Serialization/StringAliasConverter.cs +++ b/src/Elastic.Clients.Elasticsearch/Serialization/StringAliasConverter.cs @@ -38,11 +38,8 @@ public override void Write(Utf8JsonWriter writer, T value, JsonSerializerOptions } } - -internal sealed class EnumStructConverter : JsonConverter +internal sealed class EnumStructConverter : JsonConverter where T : new() { - // TODO: Rename if not valid - public override T? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { var value = reader.GetString(); @@ -50,7 +47,7 @@ internal sealed class EnumStructConverter : JsonConverter var instance = (T)Activator.CreateInstance( typeof(T), BindingFlags.Instance | BindingFlags.NonPublic, - args: new object[] { value }, + args: new object[] { value }, // TODO: Perf - Review use of ArrayPool binder: null, culture: null)!; 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 a69918eb0a2..7eb234a7b28 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 @@ -801,11 +801,23 @@ public override void Write(Utf8JsonWriter writer, HighlighterTagsSchema value, J } } - public partial struct HighlighterType + [JsonConverter(typeof(EnumStructConverter))] + public readonly partial struct HighlighterType { - public const string Unified = "unified"; - public const string Plain = "plain"; - public const string FastVector = "fvh"; + public HighlighterType(string value) => Value = value; + public readonly string Value { get; } + + public static HighlighterType Unified { get; } = new HighlighterType("unified"); + public static HighlighterType Plain { get; } = new HighlighterType("plain"); + public static HighlighterType FastVector { get; } = new HighlighterType("fvh"); + public override string ToString() => Value ?? string.Empty; + public static implicit operator string(HighlighterType highlighterType) => highlighterType.Value; + public static implicit operator HighlighterType(string value) => new(value); + public override int GetHashCode() => Value.GetHashCode(); + public override bool Equals(object obj) => obj is HighlighterType other && this.Equals(other); + public bool Equals(HighlighterType other) => Value == other.Value; + public static bool operator ==(HighlighterType a, HighlighterType b) => a.Equals(b); + public static bool operator !=(HighlighterType a, HighlighterType b) => !(a == b); } [JsonConverter(typeof(IBDistributionConverter))] @@ -1305,12 +1317,24 @@ public override void Write(Utf8JsonWriter writer, ScoreMode value, JsonSerialize } } - public partial struct ScriptLanguage + [JsonConverter(typeof(EnumStructConverter))] + public readonly partial struct ScriptLanguage { - public const string Painless = "painless"; - public const string Mustache = "mustache"; - public const string Java = "java"; - public const string Expression = "expression"; + public ScriptLanguage(string value) => Value = value; + public readonly string Value { get; } + + public static ScriptLanguage Painless { get; } = new ScriptLanguage("painless"); + public static ScriptLanguage Mustache { get; } = new ScriptLanguage("mustache"); + public static ScriptLanguage Java { get; } = new ScriptLanguage("java"); + public static ScriptLanguage Expression { get; } = new ScriptLanguage("expression"); + public override string ToString() => Value ?? string.Empty; + public static implicit operator string(ScriptLanguage scriptLanguage) => scriptLanguage.Value; + public static implicit operator ScriptLanguage(string value) => new(value); + public override int GetHashCode() => Value.GetHashCode(); + public override bool Equals(object obj) => obj is ScriptLanguage other && this.Equals(other); + public bool Equals(ScriptLanguage other) => Value == other.Value; + public static bool operator ==(ScriptLanguage a, ScriptLanguage b) => a.Equals(b); + public static bool operator !=(ScriptLanguage a, ScriptLanguage b) => !(a == b); } [JsonConverter(typeof(ScriptSortTypeConverter))] diff --git a/src/Elastic.Clients.Elasticsearch/_Generated/Types/Highlight.g.cs b/src/Elastic.Clients.Elasticsearch/_Generated/Types/Highlight.g.cs index e538eeddf01..f2be9cb556b 100644 --- a/src/Elastic.Clients.Elasticsearch/_Generated/Types/Highlight.g.cs +++ b/src/Elastic.Clients.Elasticsearch/_Generated/Types/Highlight.g.cs @@ -116,7 +116,7 @@ public sealed partial class Highlight [JsonInclude] [JsonPropertyName("type")] - public string? Type { get; set; } + public Elastic.Clients.Elasticsearch.HighlighterType? Type { get; set; } } public sealed partial class HighlightDescriptor : SerializableDescriptorBase> @@ -174,7 +174,7 @@ public HighlightDescriptor() : base() private Elastic.Clients.Elasticsearch.HighlighterTagsSchema? TagsSchemaValue { get; set; } - private string? TypeValue { get; set; } + private Elastic.Clients.Elasticsearch.HighlighterType? TypeValue { get; set; } public HighlightDescriptor HighlightQuery(Elastic.Clients.Elasticsearch.QueryDsl.QueryContainer? highlightQuery) { @@ -326,7 +326,7 @@ public HighlightDescriptor TagsSchema(Elastic.Clients.Elasticsearch.H return Self; } - public HighlightDescriptor Type(string? type) + public HighlightDescriptor Type(Elastic.Clients.Elasticsearch.HighlighterType? type) { TypeValue = type; return Self; @@ -538,7 +538,7 @@ public HighlightDescriptor() : base() private Elastic.Clients.Elasticsearch.HighlighterTagsSchema? TagsSchemaValue { get; set; } - private string? TypeValue { get; set; } + private Elastic.Clients.Elasticsearch.HighlighterType? TypeValue { get; set; } public HighlightDescriptor HighlightQuery(Elastic.Clients.Elasticsearch.QueryDsl.QueryContainer? highlightQuery) { @@ -690,7 +690,7 @@ public HighlightDescriptor TagsSchema(Elastic.Clients.Elasticsearch.HighlighterT return Self; } - public HighlightDescriptor Type(string? type) + public HighlightDescriptor Type(Elastic.Clients.Elasticsearch.HighlighterType? type) { TypeValue = type; return Self; diff --git a/src/Elastic.Clients.Elasticsearch/_Generated/Types/HighlightField.g.cs b/src/Elastic.Clients.Elasticsearch/_Generated/Types/HighlightField.g.cs index 9ca85a4177f..4727d18308d 100644 --- a/src/Elastic.Clients.Elasticsearch/_Generated/Types/HighlightField.g.cs +++ b/src/Elastic.Clients.Elasticsearch/_Generated/Types/HighlightField.g.cs @@ -116,7 +116,7 @@ public sealed partial class HighlightField [JsonInclude] [JsonPropertyName("type")] - public string? Type { get; set; } + public Elastic.Clients.Elasticsearch.HighlighterType? Type { get; set; } } public sealed partial class HighlightFieldDescriptor : SerializableDescriptorBase> @@ -174,7 +174,7 @@ public HighlightFieldDescriptor() : base() private Elastic.Clients.Elasticsearch.HighlighterTagsSchema? TagsSchemaValue { get; set; } - private string? TypeValue { get; set; } + private Elastic.Clients.Elasticsearch.HighlighterType? TypeValue { get; set; } public HighlightFieldDescriptor HighlightQuery(Elastic.Clients.Elasticsearch.QueryDsl.QueryContainer? highlightQuery) { @@ -332,7 +332,7 @@ public HighlightFieldDescriptor TagsSchema(Elastic.Clients.Elasticsea return Self; } - public HighlightFieldDescriptor Type(string? type) + public HighlightFieldDescriptor Type(Elastic.Clients.Elasticsearch.HighlighterType? type) { TypeValue = type; return Self; @@ -548,7 +548,7 @@ public HighlightFieldDescriptor() : base() private Elastic.Clients.Elasticsearch.HighlighterTagsSchema? TagsSchemaValue { get; set; } - private string? TypeValue { get; set; } + private Elastic.Clients.Elasticsearch.HighlighterType? TypeValue { get; set; } public HighlightFieldDescriptor HighlightQuery(Elastic.Clients.Elasticsearch.QueryDsl.QueryContainer? highlightQuery) { @@ -712,7 +712,7 @@ public HighlightFieldDescriptor TagsSchema(Elastic.Clients.Elasticsearch.Highlig return Self; } - public HighlightFieldDescriptor Type(string? type) + public HighlightFieldDescriptor Type(Elastic.Clients.Elasticsearch.HighlighterType? type) { TypeValue = type; return Self; diff --git a/src/Elastic.Clients.Elasticsearch/_Generated/Types/InlineScript.g.cs b/src/Elastic.Clients.Elasticsearch/_Generated/Types/InlineScript.g.cs index 37ce3788c6f..335a82fd1dd 100644 --- a/src/Elastic.Clients.Elasticsearch/_Generated/Types/InlineScript.g.cs +++ b/src/Elastic.Clients.Elasticsearch/_Generated/Types/InlineScript.g.cs @@ -28,7 +28,7 @@ public sealed partial class InlineScript { [JsonInclude] [JsonPropertyName("lang")] - public string? Language { get; set; } + public Elastic.Clients.Elasticsearch.ScriptLanguage? Language { get; set; } [JsonInclude] [JsonPropertyName("options")] @@ -50,7 +50,7 @@ public InlineScriptDescriptor() : base() { } - private string? LanguageValue { get; set; } + private Elastic.Clients.Elasticsearch.ScriptLanguage? LanguageValue { get; set; } private Dictionary? OptionsValue { get; set; } @@ -58,7 +58,7 @@ public InlineScriptDescriptor() : base() private string SourceValue { get; set; } - public InlineScriptDescriptor Language(string? language) + public InlineScriptDescriptor Language(Elastic.Clients.Elasticsearch.ScriptLanguage? language) { LanguageValue = language; return Self; diff --git a/src/Elastic.Clients.Elasticsearch/_Generated/Types/LanguageContext.g.cs b/src/Elastic.Clients.Elasticsearch/_Generated/Types/LanguageContext.g.cs index 50c20eff42e..c6f1dfa5b62 100644 --- a/src/Elastic.Clients.Elasticsearch/_Generated/Types/LanguageContext.g.cs +++ b/src/Elastic.Clients.Elasticsearch/_Generated/Types/LanguageContext.g.cs @@ -32,6 +32,6 @@ public sealed partial class LanguageContext [JsonInclude] [JsonPropertyName("language")] - public string Language { get; init; } + public Elastic.Clients.Elasticsearch.ScriptLanguage Language { get; init; } } } \ No newline at end of file diff --git a/src/Elastic.Clients.Elasticsearch/_Generated/Types/Security/RoleTemplateInlineScript.g.cs b/src/Elastic.Clients.Elasticsearch/_Generated/Types/Security/RoleTemplateInlineScript.g.cs index 90e43350a4c..77fa988f983 100644 --- a/src/Elastic.Clients.Elasticsearch/_Generated/Types/Security/RoleTemplateInlineScript.g.cs +++ b/src/Elastic.Clients.Elasticsearch/_Generated/Types/Security/RoleTemplateInlineScript.g.cs @@ -28,7 +28,7 @@ public sealed partial class RoleTemplateInlineScript { [JsonInclude] [JsonPropertyName("lang")] - public string? Lang { get; set; } + public Elastic.Clients.Elasticsearch.ScriptLanguage? Lang { get; set; } [JsonInclude] [JsonPropertyName("options")] @@ -50,7 +50,7 @@ public RoleTemplateInlineScriptDescriptor() : base() { } - private string? LangValue { get; set; } + private Elastic.Clients.Elasticsearch.ScriptLanguage? LangValue { get; set; } private Dictionary? OptionsValue { get; set; } @@ -58,7 +58,7 @@ public RoleTemplateInlineScriptDescriptor() : base() private Union SourceValue { get; set; } - public RoleTemplateInlineScriptDescriptor Lang(string? lang) + public RoleTemplateInlineScriptDescriptor Lang(Elastic.Clients.Elasticsearch.ScriptLanguage? lang) { LangValue = lang; return Self; diff --git a/src/Elastic.Clients.Elasticsearch/_Generated/Types/StoredScript.g.cs b/src/Elastic.Clients.Elasticsearch/_Generated/Types/StoredScript.g.cs index 5375807a0c3..0beb67ceb5f 100644 --- a/src/Elastic.Clients.Elasticsearch/_Generated/Types/StoredScript.g.cs +++ b/src/Elastic.Clients.Elasticsearch/_Generated/Types/StoredScript.g.cs @@ -28,7 +28,7 @@ public sealed partial class StoredScript { [JsonInclude] [JsonPropertyName("lang")] - public string Language { get; set; } + public Elastic.Clients.Elasticsearch.ScriptLanguage Language { get; set; } [JsonInclude] [JsonPropertyName("options")] @@ -46,13 +46,13 @@ public StoredScriptDescriptor() : base() { } - private string LanguageValue { get; set; } + private Elastic.Clients.Elasticsearch.ScriptLanguage LanguageValue { get; set; } private Dictionary? OptionsValue { get; set; } private string SourceValue { get; set; } - public StoredScriptDescriptor Language(string language) + public StoredScriptDescriptor Language(Elastic.Clients.Elasticsearch.ScriptLanguage language) { LanguageValue = language; return Self;