// Copyright Epic Games, Inc. All Rights Reserved. using System; namespace EpicGames.Serialization.Converters { /// /// Converter for list types /// /// class CbNullableConverter : CbConverter> where T : struct { /// public override T? Read(CbField field) { return CbSerializer.Deserialize(field); } /// public override void Write(CbWriter writer, T? nullable) { if (nullable.HasValue) { CbSerializer.Serialize(writer, nullable.Value); } } /// public override void WriteNamed(CbWriter writer, CbFieldName name, T? nullable) { if (nullable.HasValue) { CbSerializer.Serialize(writer, name, nullable.Value); } } } /// /// Factory for CbNullableConverter /// class CbNullableConverterFactory : CbConverterFactory { /// public override CbConverter? CreateConverter(Type type) { if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>)) { Type converterType = typeof(CbNullableConverter<>).MakeGenericType(type.GenericTypeArguments); return (CbConverter)Activator.CreateInstance(converterType)!; } return null; } } }