From b4e19ad8fb6a04e9a2a657197e4728dd6fc69e71 Mon Sep 17 00:00:00 2001 From: liam Date: Tue, 19 Sep 2023 00:14:26 -0400 Subject: [PATCH] Refine Yaml output and reconsider life choices --- SchemaConverter/NewSheetDefinition.cs | 43 ++++++++++-- SchemaConverter/SchemaConverter.cs | 10 +-- SchemaConverter/SchemaConverter.csproj | 2 +- SchemaConverter/SerializeUtil.cs | 95 +++++++++++++------------- SchemaConverter/SerializeUtil2.cs | 18 +++++ SchemaConverter/SerializeUtil3.cs | 53 ++++++++++++++ 6 files changed, 161 insertions(+), 60 deletions(-) create mode 100644 SchemaConverter/SerializeUtil2.cs create mode 100644 SchemaConverter/SerializeUtil3.cs diff --git a/SchemaConverter/NewSheetDefinition.cs b/SchemaConverter/NewSheetDefinition.cs index 1e73326..b49f8ee 100644 --- a/SchemaConverter/NewSheetDefinition.cs +++ b/SchemaConverter/NewSheetDefinition.cs @@ -1,41 +1,70 @@ // ReSharper disable UnusedMember.Global // ReSharper disable InconsistentNaming + +using System.ComponentModel; +using SharpYaml; +using SharpYaml.Serialization; + namespace SchemaConverter.New; public enum FieldType { - scalar, - array, - icon, - modelId, - color, + Scalar, + Array, + Icon, + ModelId, + Color, } public class Sheet { + [YamlMember(0)] public string Name { get; set; } + + [YamlMember(1)] public string? DisplayField { get; set; } + + [YamlMember(2)] public List Fields { get; set; } } public class Field { + [YamlMember(0)] public string? Name { get; set; } + + [YamlMember(1)] public int? Count { get; set; } - public string? Comment { get; set; } + + [YamlMember(2)] + [DefaultValue(FieldType.Scalar)] public FieldType Type { get; set; } + + [YamlMember(3)] + public string? Comment { get; set; } + + [YamlMember(4)] public List? Fields { get; set; } + + [YamlMember(5)] public Link? Link { get; set; } } public class Link { - public List Target { get; set; } + [YamlMember(0)] public Condition? Condition { get; set; } + + [YamlMember(1)] + [YamlStyle(YamlStyle.Flow)] + public List Target { get; set; } } public class Condition { + [YamlMember(0)] public string Switch { get; set; } + + [YamlMember(1)] public Dictionary> Cases { get; set; } } \ No newline at end of file diff --git a/SchemaConverter/SchemaConverter.cs b/SchemaConverter/SchemaConverter.cs index 455b945..55bdfce 100644 --- a/SchemaConverter/SchemaConverter.cs +++ b/SchemaConverter/SchemaConverter.cs @@ -123,17 +123,17 @@ public class SchemaConverter Name = col.Name, Type = col.Type switch { - "quad" => FieldType.modelId, - "icon" => FieldType.icon, - "color" => FieldType.color, - _ => FieldType.scalar, + "quad" => FieldType.ModelId, + "icon" => FieldType.Icon, + "color" => FieldType.Color, + _ => FieldType.Scalar, }, Link = col.Link, }; newSchema.Fields.Add(field); } - var newSchemaStr = SerializeUtil.Serialize(newSchema); + var newSchemaStr = SerializeUtil3.Serialize(newSchema); File.WriteAllText(newSchemaPath, newSchemaStr); return true; diff --git a/SchemaConverter/SchemaConverter.csproj b/SchemaConverter/SchemaConverter.csproj index 728bf7c..3bd413b 100644 --- a/SchemaConverter/SchemaConverter.csproj +++ b/SchemaConverter/SchemaConverter.csproj @@ -10,7 +10,7 @@ - + diff --git a/SchemaConverter/SerializeUtil.cs b/SchemaConverter/SerializeUtil.cs index 3342084..9bb3162 100644 --- a/SchemaConverter/SerializeUtil.cs +++ b/SchemaConverter/SerializeUtil.cs @@ -1,47 +1,48 @@ -using YamlDotNet.Core; -using YamlDotNet.Core.Events; -using YamlDotNet.Serialization; -using YamlDotNet.Serialization.EventEmitters; -using YamlDotNet.Serialization.NamingConventions; - -namespace SchemaConverter; - -public static class SerializeUtil -{ - private static readonly ISerializer _serializer; - - static SerializeUtil() - { - _serializer = new SerializerBuilder() - .WithIndentedSequences() - .WithNamingConvention(CamelCaseNamingConvention.Instance) - .ConfigureDefaultValuesHandling(DefaultValuesHandling.OmitDefaults) - // .WithEventEmitter(nextEmitter => new FlowEverythingEmitter(nextEmitter)) - .Build(); - } - - public static string Serialize(object o) - { - return _serializer.Serialize(o); - } - - public class FlowEverythingEmitter : ChainedEventEmitter - { - public FlowEverythingEmitter(IEventEmitter nextEmitter) : base(nextEmitter) { } - - public override void Emit(MappingStartEventInfo eventInfo, IEmitter emitter) - { - Console.WriteLine($"Type: {eventInfo.Source.Type} Style: {eventInfo.Source.StaticType} Value: {eventInfo.Source.Value}"); - - eventInfo.Style = MappingStyle.Flow; - base.Emit(eventInfo, emitter); - } - - public override void Emit(SequenceStartEventInfo eventInfo, IEmitter emitter) - { - Console.WriteLine($"Type: {eventInfo.Source.Type} StaticType: {eventInfo.Source.StaticType} Value: {eventInfo.Source.Value}"); - eventInfo.Style = SequenceStyle.Flow; - nextEmitter.Emit(eventInfo, emitter); - } - } -} \ No newline at end of file +// using YamlDotNet.Core; +// using YamlDotNet.Core.Events; +// using YamlDotNet.Serialization; +// using YamlDotNet.Serialization.EventEmitters; +// using YamlDotNet.Serialization.NamingConventions; +// +// namespace SchemaConverter; +// +// public static class SerializeUtil +// { +// private static readonly ISerializer _serializer; +// +// static SerializeUtil() +// { +// _serializer = new SerializerBuilder() +// .WithIndentedSequences() +// .WithNamingConvention(CamelCaseNamingConvention.Instance) +// .ConfigureDefaultValuesHandling(DefaultValuesHandling.OmitDefaults) +// .DisableAliases() +// // .WithEventEmitter(nextEmitter => new FlowEverythingEmitter(nextEmitter)) +// .Build(); +// } +// +// public static string Serialize(object o) +// { +// return _serializer.Serialize(o); +// } +// +// public class FlowEverythingEmitter : ChainedEventEmitter +// { +// public FlowEverythingEmitter(IEventEmitter nextEmitter) : base(nextEmitter) { } +// +// public override void Emit(MappingStartEventInfo eventInfo, IEmitter emitter) +// { +// Console.WriteLine($"Type: {eventInfo.Source.Type} Style: {eventInfo.Source.StaticType} Value: {eventInfo.Source.Value}"); +// +// eventInfo.Style = MappingStyle.Flow; +// base.Emit(eventInfo, emitter); +// } +// +// public override void Emit(SequenceStartEventInfo eventInfo, IEmitter emitter) +// { +// Console.WriteLine($"Type: {eventInfo.Source.Type} StaticType: {eventInfo.Source.StaticType} Value: {eventInfo.Source.Value}"); +// eventInfo.Style = SequenceStyle.Flow; +// nextEmitter.Emit(eventInfo, emitter); +// } +// } +// } \ No newline at end of file diff --git a/SchemaConverter/SerializeUtil2.cs b/SchemaConverter/SerializeUtil2.cs new file mode 100644 index 0000000..431669f --- /dev/null +++ b/SchemaConverter/SerializeUtil2.cs @@ -0,0 +1,18 @@ +// using YamlMap; +// +// namespace SchemaConverter; +// +// public static class SerializeUtil2 +// { +// private static readonly YamlWriter _serializer; +// +// static SerializeUtil2() +// { +// _serializer = new YamlWriter(); +// } +// +// public static string Serialize(object o) +// { +// return _serializer.Write(o); +// } +// } \ No newline at end of file diff --git a/SchemaConverter/SerializeUtil3.cs b/SchemaConverter/SerializeUtil3.cs new file mode 100644 index 0000000..906237a --- /dev/null +++ b/SchemaConverter/SerializeUtil3.cs @@ -0,0 +1,53 @@ +using SharpYaml; +using SharpYaml.Events; +using SharpYaml.Serialization; +using SharpYaml.Serialization.Serializers; + +namespace SchemaConverter; + +public static class SerializeUtil3 +{ + private static readonly Serializer _serializer; + + static SerializeUtil3() + { + var settings = new SerializerSettings + { + EmitAlias = false, + EmitDefaultValues = false, + NamingConvention = new CamelCaseNamingConvention(), + IgnoreNulls = true, + }; + settings.RegisterSerializer(typeof(Dictionary>), new CustomDictionarySerializer()); + settings.RegisterSerializer(typeof(New.FieldType), new CustomFieldTypeSerializer()); + + _serializer = new Serializer(settings); + } + + public static string Serialize(object o) + { + return _serializer.Serialize(o); + } +} + +internal class CustomDictionarySerializer : DictionarySerializer +{ + protected override void WriteDictionaryItem(ref ObjectContext objectContext, KeyValuePair keyValue, KeyValuePair types) + { + objectContext.SerializerContext.WriteYaml(keyValue.Key, types.Key); + objectContext.SerializerContext.WriteYaml(keyValue.Value, types.Value, YamlStyle.Flow); + } +} + +internal class CustomFieldTypeSerializer : ScalarSerializerBase +{ + public override object? ConvertFrom(ref ObjectContext context, Scalar fromScalar) + { + return Enum.Parse(new PascalNamingConvention().Convert(fromScalar.Value)); + } + + public override string ConvertTo(ref ObjectContext objectContext) + { + return objectContext.Settings.NamingConvention.Convert(objectContext.Instance.ToString()); + } +} \ No newline at end of file