using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; namespace Robust.Shared.Serialization { public sealed class DefaultValueSerializer : ObjectSerializer { public static DefaultValueSerializer Reader() { return new() { Reading = true, }; } private DefaultValueSerializer() {} public override void DataField(ref T value, string name, T defaultValue, WithFormat withFormat, bool alwaysWrite = false) { if (Reading) { if (EqualityComparer.Default.Equals(value, default)) value = defaultValue; } } public override T ReadDataField(string name, T defaultValue) { return defaultValue; } public override bool TryReadDataField(string name, WithFormat format, [MaybeNullWhen(false)] out T value) { value = default; return false; } public override void DataField( ref TTarget value, string name, TTarget defaultValue, ReadConvertFunc ReadConvertFunc, WriteConvertFunc? WriteConvertFunc = null, bool alwaysWrite = false ) { if (Reading) { if (EqualityComparer.Default.Equals(value, default)) value = defaultValue; } } public override void DataReadFunction(string name, T defaultValue, ReadFunctionDelegate func) { if (Reading) { func(defaultValue); } } public override void DataWriteFunction(string name, T defaultValue, WriteFunctionDelegate func, bool alwaysWrite = false) { } } }