#ifndef __RARCHDB_MSGPACK_H__
#define __RARCHDB_MSGPACK_H__

#include <stdint.h>

struct rmsgpack_read_callbacks {
	int (* read_nil)(void *);
	int (* read_bool)(
	        int,
	        void *
	);
	int (* read_int)(
	        int64_t,
	        void *
	);
	int (* read_uint)(
	        uint64_t,
	        void *
	);
	int (* read_string)(
	        char *,
	        uint32_t,
	        void *
	);
	int (* read_bin)(
	        void *,
	        uint32_t,
	        void *
	);
	int (* read_map_start)(
	        uint32_t,
	        void *
	);
	int (* read_array_start)(
	        uint32_t,
	        void *
	);
};


int rmsgpack_write_array_header(
        int fd,
        uint32_t size
);
int rmsgpack_write_map_header(
        int fd,
        uint32_t size
);
int rmsgpack_write_string(
        int fd,
        const char * s,
        uint32_t len
);
int rmsgpack_write_bin(
        int fd,
        const void * s,
        uint32_t len
);
int rmsgpack_write_nil(int fd);
int rmsgpack_write_bool(
        int fd,
        int value
);
int rmsgpack_write_int(
        int fd,
        int64_t value
);
int rmsgpack_write_uint(
        int fd,
        uint64_t value
);

int rmsgpack_read(
        int fd,
        struct rmsgpack_read_callbacks * callbacks,
        void * data
);

#endif