using AutoBet.ApiGenerator.Extensions; using System; using System.IO; using System.Text; using System.Xml.Linq; namespace AutoBet.ApiGenerator { internal class ApiEnumsGenerator { public string _inputXmlFile { get; } public string _outputFilesDirectory { get; } public ApiEnumsGenerator(string inputXmlFile, string outputFilesDirectory) { _inputXmlFile = inputXmlFile; _outputFilesDirectory = outputFilesDirectory; } internal void Process(string namespaceValue, string modelFolder, string enumFolder) { var doc = XDocument.Load(_inputXmlFile); var nodes = doc.Root.Elements("simpleType"); namespaceValue += $".{modelFolder}.{enumFolder}"; var enumsDirectory = Path.Combine(_outputFilesDirectory, modelFolder, enumFolder); Directory.CreateDirectory(enumsDirectory); foreach (var node in nodes) { var sb = new StringBuilder(); CSharpClassBuilder.UsingHeader(sb, namespaceValue, "System.Runtime.Serialization"); var descriptionNode = node.Element("description"); if (descriptionNode != null && !String.IsNullOrWhiteSpace(descriptionNode.Value)) { CSharpClassBuilder.Summary(sb, descriptionNode.Value, isClassSummary: true); } var name = node.Attribute("name").Value; CSharpClassBuilder.EnumHeader(sb, name); var validValues = node.Element("validValues"); if (validValues == null) { continue; } var enumValues = validValues.Elements("value"); foreach(var enumValue in enumValues) { var parameterName = enumValue.Attribute("name").Value; sb.AppendWithIndent(8, ""); sb.AppendFormat("[EnumMember(Value = \"{0}\")]", parameterName); sb.AppendLine(); sb.AppendWithIndent(8, ""); var upperCaseNextLetter = true; for (var i = 0; i < parameterName.Length; i++) { if (upperCaseNextLetter) { upperCaseNextLetter = false; sb.Append(Char.ToUpper(parameterName[i])); continue; } if(parameterName[i] == '_') { upperCaseNextLetter = true; continue; } sb.Append(Char.ToLower(parameterName[i])); } sb.Append(','); sb.AppendLine(); } sb.Remove(sb.Length - 3, 3); sb.AppendLine(); CSharpClassBuilder.ClassFooter(sb); CSharpClassBuilder.UsingFooter(sb); File.WriteAllText(Path.Combine(enumsDirectory, $"{name}.cs"), sb.ToString()); } } } }