38 JSON_TOKEN_COMMA =
',',
39 JSON_TOKEN_COLON =
':',
40 JSON_TOKEN_LEFT_BRACE =
'{',
41 JSON_TOKEN_RIGHT_BRACE =
'}',
42 JSON_TOKEN_LEFT_BRACKET =
'[',
43 JSON_TOKEN_RIGHT_BRACKET =
']',
48#define FIELD_TYPE_INT 0
49#define FIELD_TYPE_LONG 1
50#define FIELD_TYPE_FLOAT 2
51#define FIELD_TYPE_DOUBLE 3
52#define FIELD_TYPE_SSTR 4
53#define FIELD_TYPE_ENUM 5
54#define FIELD_TYPE_STRUCT 6
55#define FIELD_TYPE_BOOL 7
56#define FIELD_TYPE_MAP 8
57#define FIELD_TYPE_INT8 9
58#define FIELD_TYPE_INT16 10
59#define FIELD_TYPE_INT32 11
60#define FIELD_TYPE_INT64 12
61#define FIELD_TYPE_UINT8 13
62#define FIELD_TYPE_UINT16 14
63#define FIELD_TYPE_UINT32 15
64#define FIELD_TYPE_UINT64 16
65#define FIELD_TYPE_ONEOF 17
68#define JSON_MAX_DEPTH 256
73#ifndef JSON_NESTED_MASK_DEFINED
74#define JSON_NESTED_MASK_DEFINED
89 const char* struct_name;
90 const char* field_name;
91 const uint64_t* field_mask;
92 int field_mask_word_count;
94 int nested_mask_count;
111static int json_unmarshal_array_internal_sstr_t(
sstr_t content,
113 sstr_t** ptr,
int* ptrlen,
115static int json_unmarshal_array_internal_int(
sstr_t content,
118static int json_unmarshal_array_internal_long(
sstr_t content,
121static int json_unmarshal_array_internal_float(
sstr_t content,
123 float** ptr,
int* ptrlen,
125static int json_unmarshal_array_internal_double(
sstr_t content,
127 double** ptr,
int* ptrlen,
129static int json_unmarshal_array_internal_int8_t(
sstr_t content,
131 int8_t** ptr,
int* ptrlen,
133static int json_unmarshal_array_internal_int16_t(
sstr_t content,
135 int16_t** ptr,
int* ptrlen,
137static int json_unmarshal_array_internal_int32_t(
sstr_t content,
139 int32_t** ptr,
int* ptrlen,
141static int json_unmarshal_array_internal_int64_t(
sstr_t content,
143 int64_t** ptr,
int* ptrlen,
145static int json_unmarshal_array_internal_uint8_t(
sstr_t content,
147 uint8_t** ptr,
int* ptrlen,
149static int json_unmarshal_array_internal_uint16_t(
sstr_t content,
151 uint16_t** ptr,
int* ptrlen,
153static int json_unmarshal_array_internal_uint32_t(
sstr_t content,
155 uint32_t** ptr,
int* ptrlen,
157static int json_unmarshal_array_internal_uint64_t(
sstr_t content,
159 uint64_t** ptr,
int* ptrlen,
163 const char* tag_field,
164 const char** variant_names,
165 const char** variant_struct_names,
167 int tag_offset,
int value_offset,
169static int json_unmarshal_array_internal_oneof(
171 void** arr_pp,
int* ptrlen,
int element_size,
172 const char* tag_field,
173 const char** variant_names,
174 const char** variant_struct_names,
176 int tag_offset,
int value_offset,
181int json_marshal_array_indent_int(
int* obj,
int len,
int indent,
int curindent,
187 for (i = 0; i < len; i++) {
201int json_marshal_array_indent_long(
long* obj,
int len,
int indent,
202 int curindent,
sstr_t out) {
207 for (i = 0; i < len; i++) {
221int json_marshal_array_indent_float(
float* obj,
int len,
int indent,
222 int curindent,
sstr_t out) {
227 for (i = 0; i < len; i++) {
241int json_marshal_array_indent_double(
double* obj,
int len,
int indent,
242 int curindent,
sstr_t out) {
247 for (i = 0; i < len; i++) {
261int json_marshal_array_indent_sstr_t(
sstr_t* obj,
int len,
int indent,
262 int curindent,
sstr_t out) {
267 for (i = 0; i < len; i++) {
283#define DEFINE_MARSHAL_ARRAY_INDENT_INTTYPE(TYPE, APPEND_FN, CAST) \
284int json_marshal_array_indent_##TYPE(TYPE* obj, int len, int indent, \
285 int curindent, sstr_t out) { \
287 sstr_append_of(out, "[", 1); \
288 sstr_append_of_if(out, "\n", 1, indent); \
289 curindent += indent; \
290 for (i = 0; i < len; i++) { \
291 sstr_append_indent(out, curindent); \
292 APPEND_FN(out, (CAST)obj[i]); \
293 if (i != len - 1) { \
294 sstr_append_of(out, ",", 1); \
296 sstr_append_of_if(out, "\n", 1, indent); \
298 curindent -= indent; \
299 sstr_append_indent(out, curindent); \
300 sstr_append_of(out, "]", 1); \
void sstr_append_uint32_str(sstr_t s, uint32_t u)
Append the decimal string representation of a uint32_t to a string.
Definition sstr.c:733
sstr_t sstr_printf_append(sstr_t buf, const char *fmt,...)
Same as sstr_printf(), but but print to buf instead of create a new one.
Definition sstr.c:279
void sstr_append_uint64_str(sstr_t s, uint64_t u)
Append the decimal string representation of a uint64_t to a string.
Definition sstr.c:742
void sstr_append_float_str(sstr_t s, float f, int precission)
Append the string representation of a float to a string.
Definition sstr.c:751
int sstr_json_escape_string_append(sstr_t out, sstr_t in)
Escape a string for JSON output and append it to a buffer.
Definition sstr.c:818
void sstr_append_long_str(sstr_t s, long l)
Append the decimal string representation of a long to a string.
Definition sstr.c:712
void sstr_append_double_str(sstr_t s, double f, int precision)
Append the string representation of a double to a string.
Definition sstr.c:767
void sstr_append_cstr(sstr_t dst, const char *src)
Extends the sstr_t by appending additional characters contained in src.
Definition sstr.c:225
void sstr_append_of(sstr_t s, const void *data, size_t length)
Extends the sstr_t by appending additional characters in data with length of length at the end of its...
Definition sstr.c:180
void sstr_append_indent(sstr_t s, size_t indent)
append spaces at the end of the sstr_t.
Definition sstr.c:896
void sstr_append_of_if(sstr_t s, const void *data, size_t length, bool cond)
Append if cond is true, otherwise do nothing.
Definition sstr.c:890
void sstr_append_int_str(sstr_t s, int i)
Append the decimal string representation of an int to a string.
Definition sstr.c:656
void * sstr_t
sstr_t are objects that represent sequences of characters.
Definition sstr.h:75
Definition json_parse.h:75
Definition json_parse.h:84
Definition json_parse.h:97
position of string
Definition struct_parse.h:175