Cysharp / MemoryPack

Zero encoding extreme performance binary serializer for C# and Unity.
MIT License
3.29k stars 193 forks source link

Wrong source generation for union record type #86

Closed robertmircea closed 1 year ago

robertmircea commented 1 year ago

This code does not compile:

using MemoryPack;

[MemoryPackable(SerializeLayout.Explicit)]
public sealed partial record ChargingBookSubmittedEvent
    ([property: MemoryPackOrder(1)] string ChargingPlatform, [property: MemoryPackOrder(2)] decimal Amount) : AbstractAuditEvent;

[MemoryPackUnion(0, typeof(ChargingBookSubmittedEvent))]
[MemoryPackable(SerializeLayout.Explicit)]
public abstract partial record AbstractAuditEvent
{
    [MemoryPackOrder(0)]
    public DateTimeOffset EventDate { get; init; }
}

because of this error:

  Partial declarations of 'AbstractAuditEvent' must be all classes, all record classes, all structs, all record structs, or all interfaces
  'AbstractAuditEvent.AbstractAuditEventFormatter' does not implement inherited abstract member 'MemoryPackFormatter<AbstractAuditEvent>.Deserialize(ref MemoryPackReader, ref AbstractAuditEvent?)'
  'AbstractAuditEvent.AbstractAuditEventFormatter' does not implement inherited abstract member 'MemoryPackFormatter<AbstractAuditEvent>.Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter>, ref AbstractAuditEvent?)'
  The type 'TBufferWriter' cannot be used as type parameter 'TBufferWriter' in the generic type or method 'MemoryPackWriter<TBufferWriter>'. There is no boxing conversion or type parameter conversion from 'TBufferWriter' to 'System.Buffers.IBufferWriter<byte>'.
neuecc commented 1 year ago

thanks, I've released v1.8.13, it includes this fix.