Initial commit
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
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());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user