8#define MSGPACK_NO_BOOST
31 msgpack::pack(
buffer, obj);
33 uint8_t* output =
static_cast<uint8_t*
>(aligned_alloc(64,
buffer.size()));
36 return { output,
buffer.size() };
42 const uint8_t* input_in,
45 size_t* output_len_out)
47 using FuncTraits =
decltype(get_func_traits<decltype(func)>());
49 typename FuncTraits::Args params;
52 msgpack::unpack(
reinterpret_cast<const char*
>(input_in), input_len_in).get().convert(params);
59 *output_len_out = output_len;
67 auto cbind_obj = get_func_traits<decltype(func)>();
69 *output_out =
static_cast<uint8_t*
>(aligned_alloc(64, schema.size() + 1));
70 memcpy(*output_out, schema.c_str(), schema.size() + 1);
71 *output_len_out = schema.size();
78#define CBIND_NOSCHEMA(cname, func) \
79 WASM_EXPORT void cname(const uint8_t* input_in, size_t input_len_in, uint8_t** output_out, size_t* output_len_out) \
81 msgpack_cbind_impl(func, input_in, input_len_in, output_out, output_len_out); \
89#define CBIND(cname, func) \
90 CBIND_NOSCHEMA(cname, func) \
91 WASM_EXPORT void cname##__schema(uint8_t** output_out, size_t* output_len_out) \
93 msgpack_cbind_schema_impl(func, output_out, output_len_out); \
uint8_t buffer[RANDOM_BUFFER_SIZE]
void msgpack_cbind_impl(const auto &func, const uint8_t *input_in, size_t input_len_in, uint8_t **output_out, size_t *output_len_out)
void msgpack_cbind_schema_impl(auto func, uint8_t **output_out, size_t *output_len_out)
std::pair< uint8_t *, size_t > msgpack_encode_buffer(auto &&obj)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
std::string msgpack_schema_to_string(const auto &obj)
Print's an object's derived msgpack schema as a string.