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