From 4c418707321722d55df2e3d4e256f0afb6b1b72c Mon Sep 17 00:00:00 2001 From: Syntriax Date: Tue, 29 Apr 2025 12:25:04 +0300 Subject: [PATCH] perf: made SerializedClass private and public fields optional --- .../Serializers/SerializedClassSerializer.cs | 38 +++++++++++-------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/Engine.Core/Serialization/Serializers/SerializedClassSerializer.cs b/Engine.Core/Serialization/Serializers/SerializedClassSerializer.cs index 11392e3..1d936e8 100644 --- a/Engine.Core/Serialization/Serializers/SerializedClassSerializer.cs +++ b/Engine.Core/Serialization/Serializers/SerializedClassSerializer.cs @@ -17,22 +17,22 @@ public class SerializedClassSerializer : IEngineTypeYamlSerializer public object? ReadYaml(IParser parser, Type type, ObjectDeserializer rootDeserializer) { SerializedClass serializedClass = new(); + Dictionary publicDictionary = []; + Dictionary privateDictionary = []; parser.Consume(); - if (parser.Consume().Value.CompareTo(nameof(SerializedClass.Type)) != 0) - throw new(); - serializedClass.Type = parser.Consume().Value; + while (!parser.TryConsume(out _)) + { + string key = parser.Consume().Value; - if (parser.Consume().Value.CompareTo(nameof(SerializedClass.Public)) != 0) - throw new(); - Dictionary publicDictionary = (Dictionary)rootDeserializer(typeof(Dictionary))!; - - if (parser.Consume().Value.CompareTo(nameof(SerializedClass.Private)) != 0) - throw new(); - Dictionary privateDictionary = (Dictionary)rootDeserializer(typeof(Dictionary))!; - - parser.Consume(); + switch (key) + { + case nameof(SerializedClass.Type): serializedClass.Type = parser.Consume().Value; break; + case nameof(SerializedClass.Public): publicDictionary = (Dictionary)rootDeserializer(typeof(Dictionary))!; break; + case nameof(SerializedClass.Private): privateDictionary = (Dictionary)rootDeserializer(typeof(Dictionary))!; break; + } + } foreach ((string key, TypeContainer typeContainer) in publicDictionary) serializedClass.Public.Add(key, Serializer.Deserialize(typeContainer.Value!.ToString()!, TypeFactory.GetType(typeContainer.Type))); @@ -61,11 +61,17 @@ public class SerializedClassSerializer : IEngineTypeYamlSerializer emitter.Emit(new Scalar(nameof(SerializedClass.Type))); emitter.Emit(new Scalar(serializedClass.Type)); - emitter.Emit(new Scalar(nameof(SerializedClass.Public))); - serializer(publics); + if (publics.Count > 0) + { + emitter.Emit(new Scalar(nameof(SerializedClass.Public))); + serializer(publics); + } - emitter.Emit(new Scalar(nameof(SerializedClass.Private))); - serializer(privates); + if (privates.Count > 0) + { + emitter.Emit(new Scalar(nameof(SerializedClass.Private))); + serializer(privates); + } emitter.Emit(new MappingEnd()); }