// Copyright Epic Games, Inc. All Rights Reserved.
using System;
using System.Collections.Generic;
namespace EpicGames.Serialization.Converters
{
///
/// Converter for array types
///
///
class CbArrayConverter : CbConverter
{
///
public override T[] Read(CbField field)
{
if (field.IsNull())
{
return null!;
}
List list = [];
foreach (CbField elementField in field)
{
list.Add(CbSerializer.Deserialize(elementField));
}
return [.. list];
}
///
public override void Write(CbWriter writer, T[] list)
{
if (list == null)
{
writer.WriteNullValue();
}
else
{
writer.BeginArray();
foreach (T element in list)
{
CbSerializer.Serialize(writer, element);
}
writer.EndArray();
}
}
///
public override void WriteNamed(CbWriter writer, CbFieldName name, T[] array)
{
if (array == null)
{
writer.WriteNull(name);
}
else
{
writer.BeginArray(name);
foreach (T element in array)
{
CbSerializer.Serialize(writer, element);
}
writer.EndArray();
}
}
}
///
/// Factory for CbListConverter
///
class CbArrayConverterFactory : CbConverterFactory
{
///
public override CbConverter? CreateConverter(Type type)
{
if (type.IsArray)
{
Type elementType = type.GetElementType()!;
Type converterType = typeof(CbArrayConverter<>).MakeGenericType(elementType);
return (CbConverter)Activator.CreateInstance(converterType)!;
}
return null;
}
}
}