sig_json.h

include/sig/value/sig_json.h

Streaming JSON writer. Part of libsig core: installed with the headers and public API (used by sig_mgmt and available to other modules). Commas and colons are inserted automatically. Any allocation failure or nesting-depth overflow is sticky: later writes are ignored and sig_json_finish() reports SIG_ERR_ALLOC. Doubles are formatted with the C locale's decimal point (libsig never calls setlocale).

SIG_JSON_MAX_DEPTH

#define SIG_JSON_MAX_DEPTH 16

sig_json

typedef struct {
    char *data;
    size_t len;
    size_t cap;
    bool failed;
    int depth;
    bool has_item[SIG_JSON_MAX_DEPTH];
    bool after_key;
} sig_json;

sig_json_init

void sig_json_init(sig_json * j)
ParameterType
jsig_json *

sig_json_free

void sig_json_free(sig_json * j)
ParameterType
jsig_json *

sig_json_reset

void sig_json_reset(sig_json * j)
ParameterType
jsig_json *

sig_json_finish

sig_status_t sig_json_finish(sig_json * j, char ** out, size_t * out_len)
ParameterType
jsig_json *
outchar **
out_lensize_t *

On SIG_OK, *out is a NUL-terminated heap string the caller must sig_free(), *out_len excludes the NUL, and j is left empty and reusable. On SIG_ERR_ALLOC, *out is untouched and j is freed.

sig_json_begin_object

void sig_json_begin_object(sig_json * j)
ParameterType
jsig_json *

sig_json_end_object

void sig_json_end_object(sig_json * j)
ParameterType
jsig_json *

sig_json_begin_array

void sig_json_begin_array(sig_json * j)
ParameterType
jsig_json *

sig_json_end_array

void sig_json_end_array(sig_json * j)
ParameterType
jsig_json *

sig_json_key

void sig_json_key(sig_json * j, const char * key)
ParameterType
jsig_json *
keyconst char *

sig_json_string

void sig_json_string(sig_json * j, const char * s)
ParameterType
jsig_json *
sconst char *

sig_json_string_n

void sig_json_string_n(sig_json * j, const char * s, size_t n)
ParameterType
jsig_json *
sconst char *
nsize_t

sig_json_int

void sig_json_int(sig_json * j, sig_int_t v)
ParameterType
jsig_json *
vsig_int_t

sig_json_bool

void sig_json_bool(sig_json * j, bool v)
ParameterType
jsig_json *
vbool

sig_json_double

void sig_json_double(sig_json * j, double v)
ParameterType
jsig_json *
vdouble

sig_json_null

void sig_json_null(sig_json * j)
ParameterType
jsig_json *

sig_json_raw

void sig_json_raw(sig_json * j, const char * s, size_t n)
ParameterType
jsig_json *
sconst char *
nsize_t

Emits s[0..n) verbatim as one value. The caller guarantees it is valid JSON (e.g. a document sig_value_from_json already accepted).