@using System.Linq @using System.Text @using ApiGenerator.Domain @using ApiGenerator @using ApiGenerator.Configuration.Overrides @inherits CodeTemplatePage @{ await IncludeGeneratorNotice(); } @functions { private const string RawSize = "Raw"; private const string SizeEnum = "Size"; private static GlobalOverrides GlobalOverrides = new GlobalOverrides(); private string CreateEnum(string enumName, string value, int? i) { var enumValue = (enumName == SizeEnum && value == string.Empty) ? RawSize : value.ToPascalCase(true); var enumCsharp = string.Format("[EnumMember(Value = \"{0}\")] {1}{2}", value, enumValue, i.HasValue ? " = 1 << " + i.Value : null); if (GlobalOverrides.ObsoleteEnumMembers.TryGetValue(enumName, out var d) && d.TryGetValue(value, out var obsolete)) { return string.Format("[Obsolete(\"{0}\")]{2}\t\t{1}", obsolete, enumCsharp, Environment.NewLine); } return enumCsharp; } private string CreateCase(string e, string o) { var enumValue = GetEnumValue(e, o); var isObsolete = GlobalOverrides.ObsoleteEnumMembers.TryGetValue(e, out var d) && d.TryGetValue(o, out _); var sb = new StringBuilder(); if (isObsolete) sb.AppendLine("#pragma warning disable 618"); sb.Append(string.Format("case {0}.{1}: return \"{2}\";", e, enumValue, o)); if (isObsolete) sb.AppendLine(Environment.NewLine + "#pragma warning disable 618"); return sb.ToString(); } private bool IsFlag(string name) { return name.EndsWith("Metric") || name.EndsWith("Feature"); } private string GetEnumValue(string enumName, string value) { return enumName == SizeEnum && value == string.Empty ? RawSize : value.ToPascalCase(true); } } // ReSharper disable RedundantUsingDirective using System; using System.Collections.Generic; using System.Collections.Concurrent; using System.Linq; using System.Text; using System.Reflection; using System.Runtime.Serialization; namespace OpenSearch.Net { @foreach (var e in Model.EnumsInTheSpec) { var isFlag = IsFlag(e.Name); @(isFlag ? "[Flags, StringEnum]" : "[StringEnum]")public enum @e.Name { @Raw(string.Join(","+ Environment.NewLine + "\t\t", e.Options.OrderBy(s => s == "_all" ? 1 : 0).Select((s, i) => CreateEnum(e.Name, s, isFlag ? (int?)i : null)))) } } public static partial class KnownEnums { static partial void RegisterEnumStringResolvers() { @foreach (var e in Model.EnumsInTheSpec) { EnumStringResolvers.TryAdd(typeof(@(e.Name)), (e) => GetStringValue((@(e.Name))e)); } } @foreach (var e in Model.EnumsInTheSpec) { var isFlag = IsFlag(e.Name); public static string GetStringValue(this @(e.Name) enumValue) { if (isFlag) { var allOption = e.Options.FirstOrDefault(o => o == "_all"); if (allOption != null) { if ((enumValue & @(e.Name).All) != 0) return "_all"; } var list = new @(Raw("List()")); var g = GlobalOverrides.ObsoleteEnumMembers.TryGetValue(e.Name, out var d); foreach (var option in e.Options.Where(o => o != "_all")) { var value = GetEnumValue(e.Name, option); if (g && d.TryGetValue(option, out var _)) { #pragma warning disable 618 if ((enumValue & @(e.Name).@(value)) != 0) list.Add("@(option)"); #pragma warning restore 618 } else { if ((enumValue & @(e.Name).@(value)) != 0) list.Add("@(option)"); } } return string.Join(",", list); } } else { switch (enumValue) { @Raw(string.Join(Environment.NewLine + "\t\t\t\t", e.Options.Select(o => CreateCase(e.Name, o)))) } throw new ArgumentException($"'{enumValue.ToString()}' is not a valid value for enum '@(e.Name)'"); } } } } }