Cerealed v0.6.1: even less boilerplate for binary serialization
Dmitry Olshansky via Digitalmars-d-announce
digitalmars-d-announce at puremagic.com
Mon Aug 3 03:37:02 PDT 2015
On 03-Aug-2015 12:27, Dicebot wrote:
> 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;
Plus/minus network byte order.
--
Dmitry Olshansky
More information about the Digitalmars-d-announce
mailing list