using Syntriax.Engine.Core; using YamlDotNet.Core; using YamlDotNet.Core.Events; using YamlDotNet.Serialization; namespace Syntriax.Engine.Serialization; public class StateEnableConverter : IEngineTypeYamlConverter { private const string SERIALIZED_SCALAR_NAME = "Properties"; public bool Accepts(Type type) => typeof(IStateEnable).IsAssignableFrom(type); public object? ReadYaml(IParser parser, Type type, ObjectDeserializer rootDeserializer) { bool enabled; IStateEnable stateEnable; parser.Consume(); if (parser.Consume().Value.CompareTo(nameof(IStateEnable.Enabled)) != 0) throw new(); enabled = bool.Parse(parser.Consume().Value); if (parser.Consume().Value.CompareTo(SERIALIZED_SCALAR_NAME) != 0) throw new(); SerializedClass instanceSerializedClass = (SerializedClass)rootDeserializer(typeof(SerializedClass))!; stateEnable = (IStateEnable)instanceSerializedClass.CreateInstance(); parser.Consume(); stateEnable.Enabled = enabled; return stateEnable; } public void WriteYaml(IEmitter emitter, object? value, Type type, ObjectSerializer serializer) { IStateEnable stateEnable = (IStateEnable)value!; emitter.Emit(new MappingStart()); emitter.Emit(new Scalar(nameof(IStateEnable.Enabled))); emitter.Emit(new Scalar(stateEnable.Enabled.ToString())); emitter.Emit(new Scalar(SERIALIZED_SCALAR_NAME)); serializer(new SerializedClass(stateEnable)); emitter.Emit(new MappingEnd()); } }