89 lines
3.2 KiB
C#
89 lines
3.2 KiB
C#
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());
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
}
|
||
|
|
}
|