using System;
using System.Runtime.CompilerServices;
using JTNE.Protocol.Extensions;
[assembly : InternalsVisibleTo ("JTNE.Protocol.Test")]
namespace JTNE.Protocol {
///
///
///
public static class JTNESerializer {
public static byte[] Serialize (JTNEPackage jTNEPackage, int minBufferSize = 256) {
return Serialize (jTNEPackage, minBufferSize);
}
public static JTNEPackage Deserialize (ReadOnlySpan bytes) {
return Deserialize (bytes);
}
public static byte[] Serialize (T obj, int minBufferSize = 256) {
var formatter = JTNEFormatterExtensions.GetFormatter ();
byte[] buffer = JTNEArrayPool.Rent (minBufferSize);
try {
var len = formatter.Serialize (ref buffer, 0, obj);
return buffer.AsSpan (0, len).ToArray ();
} finally {
JTNEArrayPool.Return (buffer);
}
}
public static T Deserialize (ReadOnlySpan bytes) {
var formatter = JTNEFormatterExtensions.GetFormatter ();
int readSize;
return formatter.Deserialize (bytes, out readSize);
}
public static dynamic Deserialize (ReadOnlySpan bytes, Type type) {
var formatter = JTNEFormatterExtensions.GetFormatter (type);
return JTNEFormatterResolverExtensions.JTNEDynamicDeserialize (formatter, bytes, out int readSize);
}
}
}