using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using JetBrains.Annotations;
using NetSerializer;
using Robust.Shared.Maths;
namespace Robust.Shared.Serialization;
///
/// NetSerializer type serializer for , , and .
///
internal sealed class NetUnsafeFloatSerializer : IStaticTypeSerializer
{
public bool Handles(Type type)
{
return type == typeof(UnsafeFloat) || type == typeof(UnsafeDouble) || type == typeof(UnsafeHalf);
}
public IEnumerable GetSubtypes(Type type)
{
return [];
}
public MethodInfo GetStaticWriter(Type type)
{
return typeof(NetUnsafeFloatSerializer).GetMethod(nameof(Write),
BindingFlags.NonPublic | BindingFlags.Static,
[typeof(Stream), type])!;
}
public MethodInfo GetStaticReader(Type type)
{
return typeof(NetUnsafeFloatSerializer).GetMethod(nameof(Read),
BindingFlags.NonPublic | BindingFlags.Static,
[typeof(Stream), type.MakeByRefType()])!;
}
[UsedImplicitly]
private static void Write(Stream stream, UnsafeFloat value)
{
Primitives.WritePrimitive(stream, value);
}
[UsedImplicitly]
private static void Read(Stream stream, out UnsafeFloat value)
{
Primitives.ReadPrimitive(stream, out float readValue);
value = readValue;
}
[UsedImplicitly]
private static void Write(Stream stream, UnsafeDouble value)
{
Primitives.WritePrimitive(stream, value);
}
[UsedImplicitly]
private static void Read(Stream stream, out UnsafeDouble value)
{
Primitives.ReadPrimitive(stream, out double readValue);
value = readValue;
}
[UsedImplicitly]
private static void Write(Stream stream, UnsafeHalf value)
{
Primitives.WritePrimitive(stream, value);
}
[UsedImplicitly]
private static void Read(Stream stream, out UnsafeHalf value)
{
Primitives.ReadPrimitive(stream, out Half readValue);
value = readValue;
}
}