Files
linker/linker.messenger.serializer.memorypack/SyncSerializer.cs
snltty ec8e407cde sync
2024-12-29 20:38:37 +08:00

60 lines
1.5 KiB
C#

using linker.messenger.sync;
using MemoryPack;
namespace linker.messenger.serializer.memorypack
{
[MemoryPackable]
public readonly partial struct SerializableSyncInfo
{
[MemoryPackIgnore]
public readonly SyncInfo info;
[MemoryPackInclude]
string Name => info.Name;
[MemoryPackInclude]
Memory<byte> Data => info.Data;
[MemoryPackConstructor]
SerializableSyncInfo(string name, Memory<byte> data)
{
var info = new SyncInfo { Name = name, Data = data };
this.info = info;
}
public SerializableSyncInfo(SyncInfo signInfo)
{
this.info = signInfo;
}
}
public class SyncInfoFormatter : MemoryPackFormatter<SyncInfo>
{
public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter> writer, scoped ref SyncInfo value)
{
if (value == null)
{
writer.WriteNullObjectHeader();
return;
}
writer.WritePackable(new SerializableSyncInfo(value));
}
public override void Deserialize(ref MemoryPackReader reader, scoped ref SyncInfo value)
{
if (reader.PeekIsNull())
{
reader.Advance(1); // skip null block
value = null;
return;
}
var wrapped = reader.ReadPackable<SerializableSyncInfo>();
value = wrapped.info;
}
}
}