Cerealed v0.6.1: even less boilerplate for binary serialization

Dicebot via Digitalmars-d-announce digitalmars-d-announce at puremagic.com
Mon Aug 3 02:27:01 PDT 2015


On Monday, 3 August 2015 at 09:21:50 UTC, Atila Neves wrote:
> The summary is you can now write this:
>
>     struct UdpPacket {
>         static struct Header {
>             ushort srcPort;
>             ushort dstPort;
>             ushort length;
>             ushort checksum;
>         }
>
>         enum headerSize = unalignedSizeof!Header;
>         alias header this;
>
>         Header header;
>         @LengthInBytes("length - headerSize") ubyte[] data;
>     }
>

This deserialization will be identical to casting like this, 
right? (Not trying to diminish your work, just making sure I get 
semantics :))

align(1)
struct UdpPacket
{
     align(1)
     static struct Header {
         ushort srcPort;
         ushort dstPort;
         ushort length;
         ushort checksum;
     }

     Header   header;
     ubyte[0] data;
}

// ...

auto packet = cast(UdpPacket*) raw_data.ptr;


More information about the Digitalmars-d-announce mailing list