using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using NetSerializer;
namespace Robust.Shared.Serialization;
///
/// Replaces NetSerializer's default float handling to read NaN values as 0.
///
internal sealed class NetSafeFloatSerializer : IStaticTypeSerializer
{
public bool Handles(Type type)
{
return type == typeof(float) || type == typeof(double) || type == typeof(Half);
}
public IEnumerable GetSubtypes(Type type)
{
return [];
}
public MethodInfo GetStaticWriter(Type type)
{
return typeof(Primitives).GetMethod(nameof(Primitives.WritePrimitive),
BindingFlags.Public | BindingFlags.Static,
[typeof(Stream), type])!;
}
public MethodInfo GetStaticReader(Type type)
{
return typeof(SafePrimitives).GetMethod(nameof(SafePrimitives.ReadPrimitive),
BindingFlags.Public | BindingFlags.Static,
[typeof(Stream), type.MakeByRefType()])!;
}
}