using System; using System.IO; using System.Text; namespace UniGLTF.JsonSchema.Schemas { public abstract class JsonSchemaBase { public readonly string JsonPath; public string ClassName => JsonPath .Replace(".", "__") .Replace("[]", "_ITEM") .Replace("{}", "_PROP") ; public readonly JsonSchemaType JsonSchemaType; public string Title; public readonly string Description; /// HardCoding public string HardCode; public JsonSchemaBase(in JsonSchemaSource source) { JsonPath = source.JsonPath; JsonSchemaType = source.type; Title = source.title; Description = source.description; } public override string ToString() { var sb = new StringBuilder(); sb.Append("["); sb.Append(JsonSchemaType); sb.Append("]"); if (!string.IsNullOrEmpty(Title)) { sb.Append($" \"{Title}\""); } return sb.ToString(); } public bool IsArrayItem; /// /// CSharpの型 /// /// public abstract string ValueType { get; } /// /// Use or not GenerateDeserializer and GenerateSerializer /// public abstract bool IsInline { get; } /// /// Deserializer の呼び出し /// /// /// /// public abstract string GenerateDeserializerCall(string callName, string argName); /// /// Deserializer の実装 /// /// /// public virtual void GenerateDeserializer(TraverseContext writer, string callName) { throw new NotImplementedException(); } /// /// Serialize 時に出力するか否か /// /// * null や -1 などの無効な値のキーをスキップするために使う /// /// /// /// public abstract string CreateSerializationCondition(string argName); /// /// Serializer の呼び出し /// /// /// /// public abstract string GenerateSerializerCall(string callName, string argName); /// /// Serializer 実装 /// /// /// public virtual void GenerateSerializer(TraverseContext writer, string callName) { throw new NotImplementedException(); } } }