// 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;
}
}
}