using System; using YamlDotNet.Core; using YamlDotNet.Core.Events; using YamlDotNet.Serialization; namespace Syntriax.Engine.Core.Serialization; public class Line2DEquationSerializer : IEngineTypeYamlSerializer { public bool Accepts(Type type) => type == typeof(Line2DEquation); public object? ReadYaml(IParser parser, Type type, ObjectDeserializer rootDeserializer) { parser.Consume(); if (parser.Consume().Value.CompareTo(nameof(Line2DEquation.Slope)) != 0) throw new ArgumentException($"{nameof(Line2DEquation)} mapping must start with {nameof(Line2DEquation.Slope)}"); float slope = (float)rootDeserializer(typeof(float))!; if (parser.Consume().Value.CompareTo(nameof(Line2DEquation.OffsetY)) != 0) throw new ArgumentException($"{nameof(Line2DEquation)} mapping must end with {nameof(Line2DEquation.OffsetY)}"); float offset = (float)rootDeserializer(typeof(float))!; parser.Consume(); return new Line2DEquation(slope, offset); } public void WriteYaml(IEmitter emitter, object? value, Type type, ObjectSerializer serializer) { Line2DEquation line2DEquation = (Line2DEquation)value!; emitter.Emit(new MappingStart()); emitter.Emit(new Scalar(nameof(Line2DEquation.Slope))); serializer(line2DEquation.Slope, typeof(float)); emitter.Emit(new Scalar(nameof(Line2DEquation.OffsetY))); serializer(line2DEquation.OffsetY, typeof(float)); emitter.Emit(new MappingEnd()); } }