using System; using YamlDotNet.Core; using YamlDotNet.Core.Events; using YamlDotNet.Serialization; namespace Syntriax.Engine.Core.Serialization; public class Line2DSerializer : IEngineTypeYamlSerializer { public bool Accepts(Type type) => type == typeof(Line2D); public object? ReadYaml(IParser parser, Type type, ObjectDeserializer rootDeserializer) { parser.Consume(); if (parser.Consume().Value.CompareTo(nameof(Line2D.From)) != 0) throw new ArgumentException($"{nameof(Line2D)} mapping must start with {nameof(Line2D.From)}"); Vector2D from = (Vector2D)rootDeserializer(typeof(Vector2D))!; if (parser.Consume().Value.CompareTo(nameof(Line2D.To)) != 0) throw new ArgumentException($"{nameof(Line2D)} mapping must end with {nameof(Line2D.To)}"); Vector2D to = (Vector2D)rootDeserializer(typeof(Vector2D))!; parser.Consume(); return new Line2D(from, to); } public void WriteYaml(IEmitter emitter, object? value, Type type, ObjectSerializer serializer) { Line2D line2D = (Line2D)value!; emitter.Emit(new MappingStart()); emitter.Emit(new Scalar(nameof(Line2D.From))); serializer(line2D.From, typeof(Vector2D)); emitter.Emit(new Scalar(nameof(Line2D.To))); serializer(line2D.To, typeof(Vector2D)); emitter.Emit(new MappingEnd()); } }