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