This module generates Haskell code for serialising and deserialising libevent tagged data structures, as implemented in libevent-1.4.0-beta.
A single .rpc file (containing one or more structures) is mapped to a single Haskell file. Take this example:
struct test { required int a = 1; optional string b = 2; repeated struct[test2] c = 3; }
This will result in a data decl for Test
, having named members:
test_a, test_b and test_c. Required elements are simple, optional
elements are wrapped in a Maybe and repeated elements in a list.
Types are mapped thus:
- int -> Word32
- string -> String
- bytes -> ByteString (strict)
- bytes[n] -> ByteString (with runtime checks on the size)
- struct[name] -> Name (the struct must be defined in the same file)
In the example above, test2
is required to be in the same .rpc file.
For a structure named test
, the following would also be generated:
-
testEmpty
- a Test filled with default values -
testDeserialise
- a strict Get instance to deserialise a test. Note that these structures are self-deliminating, so additional garbage at the end will be consumed and will probably result in an error -
testDeserialiseBS
- a function with type ByteString -> Either String Test where the String is an error message -
testSerialise
- a Put Test function. Again, recall that these structures aren't self deliminating -
testSerialiseBS
- a function with type Test -> ByteString
Each structure will also be an instance of the TaggedStructure
class
that you can find in Codec.Libevent.Class