using Unity.Collections; using UnityEngine.Assertions; namespace RebootKit.Engine.Network { public static class DataSerializationUtils { public const int k_DefaultMessageSize = 256; public static NativeArray Serialize(TEntity entity, Allocator allocator = Allocator.Temp) where TEntity : ISerializableEntity { int size = entity.GetMaxBytes(); if (size < 0) { size = k_DefaultMessageSize; } NativeArray data = new NativeArray(size, allocator); using NetworkBufferWriter writer = new NetworkBufferWriter(data, 0); Assert.IsTrue(writer.WillFit(size)); if (writer.WillFit(size)) { entity.Serialize(writer); return data; } return default; } public static void Deserialize(NativeSlice data, ref TEntity entity) where TEntity : ISerializableEntity { using NetworkBufferReader reader = new NetworkBufferReader(data); if (reader.HasNext(data.Length)) { entity.Deserialize(reader); } } } }