using System; using System.Collections.Generic; namespace x0.Jester { public delegate bool ResolveConverter(JesterConverter conv1, JesterConverter conv2); public class SerializerSettings { private readonly Dictionary _converters = new Dictionary(); public IReadOnlyDictionary Converters => _converters; public JesterSerializeMembers SerializeFilter { get; set; } = JesterSerializeMembers.All; public ResolveConverter ConverterResolver { get; set; } private byte _converterIndex = (byte) (DataType.LastBuiltInType.Id + 1); public SerializerSettings AddConverter(JesterConverter converter) { while (_converterIndex != 0) { if (_converters.TryAdd(_converterIndex++, converter)) { return this; } } throw new OverflowException("Maximum number of supported types has been reached"); } public SerializerSettings AddConverter(JesterConverter converter, byte typeId) { if (typeId <= DataType.LastBuiltInType.Id) { throw new ArgumentOutOfRangeException($"Types 1-{DataType.LastBuiltInType.Id} are reserved"); } if (_converters.TryAdd(typeId, converter)) { return this; } throw new OverflowException($"Type {typeId} is already defined"); } } }