using System.Text.Json;
using System.Text.Json.Serialization;
namespace Prefab.Base;
///
/// Serializes values as their logical names and deserializes by name or value.
///
/// Enumeration type to convert.
public class PrefabEnumJsonConverter : JsonConverter where TEnum : PrefabEnum
{
///
public override TEnum Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) => reader.TokenType switch
{
JsonTokenType.String => PrefabEnum.FromName(reader.GetString()!),
JsonTokenType.Number => PrefabEnum.FromValue(reader.GetInt32()),
_ => throw new JsonException($"Unsupported token type '{reader.TokenType}' for Prefab enum deserialization.")
};
///
public override void Write(Utf8JsonWriter writer, TEnum value, JsonSerializerOptions options) => writer.WriteStringValue(value.Name);
}