91 lines
2.3 KiB
C#

using System;
using System.Linq;
namespace UniGLTF.JsonSchema.Schemas
{
public struct EnumValue
{
public string Name;
public int Value;
public override string ToString()
{
return $"{Name}={Value}";
}
}
public class EnumJsonSchema : JsonSchemaBase
{
public readonly EnumValue[] Values;
public EnumJsonSchema(in JsonSchemaSource source) : base(source)
{
Values = source.enumValues.Select(x => new EnumValue
{
Name = x.Key,
Value = x.Value
}).ToArray();
}
public override string ValueType => Title;
public override bool IsInline => true;
public override string GenerateDeserializerCall(string callName, string argName)
{
return $"({ValueType})argName";
}
public override string CreateSerializationCondition(string argName)
{
return "true";
}
public override string GenerateSerializerCall(string callName, string argName)
{
return $"f.Value((int){argName})";
}
public override string ToString()
{
var values = string.Join(", ", Values);
return $"{base.ToString()} {{{values}}}";
}
}
public class EnumStringJsonSchema : JsonSchemaBase
{
public readonly String[] Values;
public EnumStringJsonSchema(in JsonSchemaSource source) : base(source)
{
Values = source.enumStringValues;
}
public override string ValueType => Title;
public override bool IsInline => true;
public override string GenerateDeserializerCall(string callName, string argName)
{
return $"({ValueType})Enum.Parse(typeof({ValueType}), {argName}.GetString(), true)";
}
public override string CreateSerializationCondition(string argName)
{
return "true";
}
public override string GenerateSerializerCall(string callName, string argName)
{
return $"f.Value({argName}.ToString())";
}
public override string ToString()
{
var values = string.Join(", ", Values);
return $"{base.ToString()} {{{values}}}";
}
}
}