Cerealed v0.2.0 - a(nother) D serialisation library
Atila Neves
atila.neves at gmail.com
Mon Nov 18 08:49:46 PST 2013
http://code.dlang.org/packages/cerealed
https://github.com/atilaneves/cerealed
But what about Orange / std.serialization? Well,
1. I started this before I knew about Orange. This is actually
based on a library I wrote in C++
(https://bitbucket.org/atilaneves/cereal) for the game I'm trying
to finish, and it dawned on me it would probably be easier in D.
It was.
2. Orange serialises to XML, I need/want binary. I could've
written a binary archive, I guess, but I'd rather do this.
3. I would've written this for fun anyway.
The deal here is binary serialisation with minimal to no
boilerplate. As mentioned in the README, I used this to implement
a MQTT broker with minimal fuss. Serialising classes, structs,
and normal D types requires writing nothing at all. Custom
serialisation can be handled in two different ways and both of
them require writing only one function for both struct/class ->
bytes and vice-versa. Since a code sample is worth a 1000 words:
import cerealed; //uses package.d from 2.064
struct MyStruct {
ubyte mybyte1;
@NoCereal uint nocereal1; //won't be serialised
//the next 3 members will all take up one byte
@Bits!4 ubyte nibble; //gets packed into 4 bits
@Bits!1 ubyte bit; //gets packed into 1 bit
@Bits!3 ubyte bits3; //gets packed into 3 bits
ubyte mybyte2;
}
auto enc = new Cerealiser();
enc ~= MyStruct(3, 123, 14, 1, 2, 42);
assert(enc.bytes == [ 3, 0xea /*1110 1 010*/, 42]);
auto dec = new Decerealizer([ 3, 0xea, 42]); //US spelling
works too
//the 2nd value is 0 and not 123 since that value
//doesn't get serialised/deserialised
assert(dec.value!MyStruct == MyStruct(3, 0, 14, 1, 2, 42));
Custom serialisation is explained in the README. I had to use it
for my MQTT project and it worked quite well.
I still need to add a bunch of negative tests and accompanying
code but this is good enough to fool around with for the moment.
Atila
More information about the Digitalmars-d-announce
mailing list