Skip to content
This repository has been archived by the owner on Mar 1, 2023. It is now read-only.
/ msgpuck Public archive

A simple and efficient MsgPack binary serialization library in a self-contained header file

License

Notifications You must be signed in to change notification settings

rtsisyk/msgpuck

Repository files navigation

MsgPuck

Travis License RPM Packages Debian Packages Telegram Maillist

MsgPuck is a compact and efficient MessagePack serialization library:

  • Zero-cost abstractions and zero overhead
  • Clean and readable C code ready to use
  • Easy to incorporate into your project
  • Fully documented and covered by unit tests
  • Liberal license (BSD-2)

Status

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.

Examples

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);

Usage

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.

See Also

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.