using System; using Syntriax.Engine.Core; using YamlDotNet.Core; using YamlDotNet.Core.Events; using YamlDotNet.Serialization; namespace Syntriax.Engine.Serializers.Yaml; public class AABBConverter : EngineTypeYamlSerializerBase { public override AABB Read(IParser parser, Type type, ObjectDeserializer rootDeserializer) { parser.Consume(); if (parser.Consume().Value.CompareTo(nameof(AABB.LowerBoundary)) != 0) throw new ArgumentException($"{nameof(AABB)} mapping must start with {nameof(AABB.LowerBoundary)}"); Vector2D lowerBoundary = (Vector2D)rootDeserializer(typeof(Vector2D))!; if (parser.Consume().Value.CompareTo(nameof(AABB.UpperBoundary)) != 0) throw new ArgumentException($"{nameof(AABB)} mapping must end with {nameof(AABB.UpperBoundary)}"); Vector2D upperBoundary = (Vector2D)rootDeserializer(typeof(Vector2D))!; parser.Consume(); return new AABB(lowerBoundary, upperBoundary); } public override void WriteYaml(IEmitter emitter, object? value, Type type, ObjectSerializer serializer) { AABB aabb = (AABB)value!; emitter.Emit(new MappingStart()); emitter.Emit(new Scalar(nameof(AABB.LowerBoundary))); serializer(aabb.LowerBoundary, typeof(Vector2D)); emitter.Emit(new Scalar(nameof(AABB.UpperBoundary))); serializer(aabb.UpperBoundary, typeof(Vector2D)); emitter.Emit(new MappingEnd()); } }