118 lines
3.2 KiB
C#
118 lines
3.2 KiB
C#
using System;
|
|
|
|
namespace UniGLTF.JsonSchema.Schemas
|
|
{
|
|
public abstract class PrimitiveJsonSchemaBase : JsonSchemaBase
|
|
{
|
|
protected PrimitiveJsonSchemaBase(in JsonSchemaSource source) : base(source)
|
|
{ }
|
|
|
|
public override bool IsInline => true;
|
|
|
|
public override string CreateSerializationCondition(string argName)
|
|
{
|
|
if (IsArrayItem)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
else
|
|
{
|
|
return $"{argName}.HasValue";
|
|
}
|
|
}
|
|
|
|
public override string GenerateSerializerCall(string callName, string argName)
|
|
{
|
|
if (IsArrayItem)
|
|
{
|
|
return $"f.Value({argName})";
|
|
}
|
|
else
|
|
{
|
|
return $"f.Value({argName}.GetValueOrDefault())";
|
|
}
|
|
}
|
|
}
|
|
|
|
public class BoolJsonSchema : PrimitiveJsonSchemaBase
|
|
{
|
|
public override string ValueType => IsArrayItem ? "bool" : "bool?";
|
|
|
|
public BoolJsonSchema(in JsonSchemaSource src) : base(src)
|
|
{
|
|
}
|
|
|
|
public override string GenerateDeserializerCall(string callName, string argName)
|
|
{
|
|
return $"{argName}.GetBoolean()";
|
|
}
|
|
}
|
|
|
|
public class IntegerJsonSchema : PrimitiveJsonSchemaBase
|
|
{
|
|
public readonly int? Minimum;
|
|
public readonly bool ExclusiveMinimum;
|
|
public readonly int? Maximum;
|
|
public readonly int? MultipleOf;
|
|
|
|
public string IndexTargetJsonPath;
|
|
|
|
public IntegerJsonSchema(in JsonSchemaSource source) : base(source)
|
|
{
|
|
if (source.minimum.HasValue)
|
|
{
|
|
Minimum = (int)source.minimum.Value;
|
|
}
|
|
ExclusiveMinimum = source.exclusiveMinimum;
|
|
if (source.maximum.HasValue)
|
|
{
|
|
Maximum = (int)source.maximum.Value;
|
|
}
|
|
if (source.multipleOf.HasValue)
|
|
{
|
|
MultipleOf = (int)source.multipleOf.Value;
|
|
}
|
|
}
|
|
|
|
public override string ValueType => IsArrayItem ? "int" : "int?";
|
|
|
|
public override string GenerateDeserializerCall(string callName, string argName)
|
|
{
|
|
return $"{argName}.GetInt32()";
|
|
}
|
|
}
|
|
|
|
public class NumberJsonSchema : PrimitiveJsonSchemaBase
|
|
{
|
|
public readonly double? Minimum;
|
|
public readonly bool ExclusiveMinimum;
|
|
public readonly double? Maximum;
|
|
public readonly double? MultipleOf;
|
|
|
|
public NumberJsonSchema(in JsonSchemaSource source) : base(source)
|
|
{
|
|
if (source.minimum.HasValue)
|
|
{
|
|
Minimum = source.minimum.Value;
|
|
}
|
|
ExclusiveMinimum = source.exclusiveMinimum;
|
|
if (source.maximum.HasValue)
|
|
{
|
|
Maximum = source.maximum.Value;
|
|
}
|
|
if (source.multipleOf.HasValue)
|
|
{
|
|
MultipleOf = source.multipleOf.Value;
|
|
}
|
|
}
|
|
|
|
public override string ValueType => IsArrayItem ? "float" : "float?";
|
|
|
|
public override string GenerateDeserializerCall(string callName, string argName)
|
|
{
|
|
return $"{argName}.GetSingle()";
|
|
}
|
|
}
|
|
|
|
}
|