A simple and efficient MsgPack binary serialization library in a self-contained header file
MsgPuck is a compact and efficient MessagePack serialization library:
MsgPuck is stable, which means it have been used in production without
serious bugs for quite a while now. The library is fully documented and
covered by unit tests.
Please feel free to file a ticket if your have a problem or a question.
Encoding:
char buf[1024];
char *w = buf;
w = mp_encode_array(w, 4);
w = mp_encode_uint(w, 10);
w = mp_encode_str(w, "hello world", strlen("hello world"));
w = mp_encode_bool(w, true);
w = mp_encode_double(w, 3.1415);
Validating:
const char *end = buf + xx;
const char *b = buf;
int rc = mp_check(&b, end);
assert(rc == 0);
assert(b == end);
Decoding:
uint32_t size;
uint64_t ival;
const char *sval;
uint32_t sval_len;
bool bval;
double dval;
const char *r = buf;
size = mp_decode_array(&r);
/* size is 4 */
ival = mp_decode_uint(&r);
/* ival is 10; */
sval = mp_decode_str(&r, &sval_len);
/* sval is "hello world", sval_len is strlen("hello world") */
bval = mp_decode_bool(&r);
/* bval is true */
dval = mp_decode_double(&r);
/* dval is 3.1415 */
assert(r == w);
You need a C89+ or C++03+ compatible compiler to use msgpuck.
Add this project as a submodule or just use libmsgpuck-dev package.
MsgPuck is designed to be fully embedded to your application by a C/C++
compiler. However, some functions require auxiliary static tables which
should be expanded somewhere in a compilation unit (*.c
or *.cc
file).
Please link libmsgpuck.a to your binary to avoid problems with unresolved
symbols.
API documentation can be also generated using make doc
(Doxygen is required).
MsgPuck was written to use within Tarantool -
the world’s first full-featured MsgPack-based database.