/** * \file modp_json.h * \brief ad-hoc json generator * * Used to serialize data structures. * * There is no decoder. */ /* *
 * High Performance c-string to javascript-string encoder
 *
 * Copyright © 2014-2016 Nick Galbreath
 * All rights reserved.
 *
 * https://github.com/client9/stringencoders
 *
 * Released under MIT license.  See LICENSE for details.
 * 
*/ #ifndef COM_MODP_STRINGENCODERS_BJSON #define COM_MODP_STRINGENCODERS_BJSON #ifdef __cplusplus #ifndef MODP_C_BEGIN_DECLS #define MODP_C_BEGIN_DECLS extern "C" { #define MODP_C_END_DECLS } #endif #else #define MODP_C_BEGIN_DECLS #define MODP_C_END_DECLS #endif MODP_C_BEGIN_DECLS #ifndef JSON_MAX_DEPTH #define JSON_MAX_DEPTH 10 #endif /* pull in size_t */ #include #include typedef struct { int depth; int state[JSON_MAX_DEPTH]; size_t size; char* dest; } modp_json_ctx; void modp_json_init(modp_json_ctx* ctx, char* dest); size_t modp_json_end(modp_json_ctx* ctx); void modp_json_map_open(modp_json_ctx* ctx); void modp_json_map_close(modp_json_ctx* ctx); void modp_json_ary_open(modp_json_ctx* ctx); void modp_json_ary_close(modp_json_ctx* ctx); /* * * Note: to add a 'null string' explicitly use 'add_null' and do NOT * pass in a null pointer here. */ void modp_json_add_string(modp_json_ctx* ctx, const char*, size_t); void modp_json_add_cstring(modp_json_ctx* ctx, const char*); /* * Sets a json 'false' value if val = 0, other wise sets a 'true' value */ void modp_json_add_bool(modp_json_ctx* ctx, int val); void modp_json_add_double(modp_json_ctx* ctx, double d); void modp_json_add_int32(modp_json_ctx* ctx, int val); void modp_json_add_uint32(modp_json_ctx* ctx, uint32_t val); /** * JSON/Javascript only supports a single number type represented by a * 64-bit IEEE floating-point value. This means JSON can not exactly * represent a full 64-bit integer since the mantissa of a double is * only 53 bits. If the input integer needs more than 53 bits then * the value is stored as string "1234567899329342" instead of a * raw/naked numeric value. If you wish to anyways represent 64-bit * integers as a string, use stringonly=1. If you wish to never * casting to a string, use add_uint32 or add_int32 which can be * expressed directly or consider loosing precession and cast to a * double value. * */ void modp_json_add_uint64(modp_json_ctx* ctx, uint64_t val, int stringonly); /* * explicitly add a null type */ void modp_json_add_null(modp_json_ctx* ctx); MODP_C_END_DECLS #endif /* modp_bjson */