Virgil IoT KIT
json_generator.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2014, Marvell International Ltd.
3  * All Rights Reserved.
4  */
5 
75 #ifndef _JSON_GENERATOR_H_
76 #define _JSON_GENERATOR_H_
77 
78 #ifdef __cplusplus
79 namespace VirgilIoTKit {
80 extern "C" {
81 #endif
82 
83 #define MAX_JSON_STR_LEN 64 /* Maximum object or member name length */
84 #define MAX_JSON_VAL_LEN 128 /* Maximum value name length */
85 typedef enum {
94 
95 struct json_str {
96  char *buff;
97  size_t len;
98  size_t free_ptr; /* Where the \0 currently is, start writing from this offset */
99 };
111 void
112 json_str_init(struct json_str *jptr, char *buff, int len);
113 
129 void
130 json_str_init_no_clear(struct json_str *jptr, char *buff, int len);
131 
132 /* NULL terminate JSON string.
133  *
134  * This API NULL terminates the JSON string initialized using
135  * json_str_init_no_clear()
136  *
137  * \param[in] jptr Pointer to json_str object passed to
138  * json_str_init_no_clear()
139  */
140 void
141 json_str_finish(struct json_str *jptr);
142 
153 int
154 json_start_object(struct json_str *jptr);
155 
170 int
171 json_push_object(struct json_str *jptr, const char *name);
172 
178 #define json_pop_object(jptr) json_close_object((jptr))
179 
192 int
193 json_push_array_object(struct json_str *jptr, const char *name);
194 
205 int
206 json_pop_array_object(struct json_str *jptr);
207 
218 int
219 json_close_object(struct json_str *jptr);
220 
221 int
222 json_set_object_value(struct json_str *jptr,
223  const char *name,
224  const char *str,
225  int64_t value,
226  float val,
227  short precision,
228  json_data_types data);
229 
240 #define json_set_val_str(jptr, name, val) json_set_object_value(jptr, name, val, 0, 0.0, 0, JSON_VAL_STR)
241 
252 #define json_set_val_int(jptr, name, val) json_set_object_value(jptr, name, NULL, val, 0.0, 0, JSON_VAL_INT)
253 
264 #define json_set_val_uint(jptr, name, val) json_set_object_value(jptr, name, NULL, val, 0.0, 0, JSON_VAL_UINT)
265 
276 #define json_set_val_uint_64(jptr, name, val) json_set_object_value(jptr, name, NULL, val, 0.0, 0, JSON_VAL_UINT_64)
277 
288 #define json_set_val_float(jptr, name, val) json_set_object_value(jptr, name, NULL, 0, val, 2, JSON_VAL_FLOAT)
289 
301 #define json_set_val_float_precision(jptr, name, val, precision) \
302  json_set_object_value(jptr, name, NULL, 0, val, precision, JSON_VAL_FLOAT)
303 
314 #define json_set_val_bool(jptr, name, val) \
315  ((val == true) ? (json_set_object_value(jptr, name, NULL, 1, 0.0, 0, JSON_VAL_BOOL)) \
316  : (json_set_object_value(jptr, name, NULL, 0, 0.0, 0, JSON_VAL_BOOL)))
317 
327 #define json_set_val_null(jptr, name) (json_set_object_value(jptr, name, NULL, 0, 0.0, 0, JSON_VAL_NULL))
328 
342 int
343 json_start_array(struct json_str *jptr);
344 
355 int
356 json_close_array(struct json_str *jptr);
357 
358 int
359 json_set_array_value(struct json_str *jptr, char *str, int value, float val, json_data_types data);
360 
370 #define json_set_array_str(jptr, val) json_set_array_value(jptr, val, 0, 0.0, JSON_VAL_STR)
371 
381 #define json_set_array_int(jptr, val) json_set_array_value(jptr, NULL, val, 0.0, JSON_VAL_INT)
382 
392 #define json_set_array_float(jptr, val) json_set_array_value(jptr, NULL, 0, val, JSON_VAL_FLOAT)
393 
403 #define json_set_array_bool(jptr, val) \
404  ((val == true) ? (json_set_array_value(jptr, NULL, 1, 0.0, JSON_VAL_BOOL)) \
405  : (json_set_array_value(jptr, NULL, 0, 0.0, JSON_VAL_BOOL)))
406 
407 #ifdef __cplusplus
408 } // extern "C"
409 } // namespace VirgilIoTKit
410 #endif
411 
412 #endif /* _JSON_GENERATOR_H_ */
json_str_finish
void json_str_finish(struct json_str *jptr)
json_str_init_no_clear
void json_str_init_no_clear(struct json_str *jptr, char *buff, int len)
Initialize the JSON generator without clearing the buffer.
json_close_array
int json_close_array(struct json_str *jptr)
Close a JSON array.
json_set_array_value
int json_set_array_value(struct json_str *jptr, char *str, int value, float val, json_data_types data)
JSON_VAL_BOOL
@ JSON_VAL_BOOL
Definition: json_generator.h:91
json_str::free_ptr
size_t free_ptr
Definition: json_generator.h:98
JSON_VAL_FLOAT
@ JSON_VAL_FLOAT
Definition: json_generator.h:90
json_pop_array_object
int json_pop_array_object(struct json_str *jptr)
Close a JSON array object.
json_str::buff
char * buff
Definition: json_generator.h:96
json_set_object_value
int json_set_object_value(struct json_str *jptr, const char *name, const char *str, int64_t value, float val, short precision, json_data_types data)
JSON_VAL_STR
@ JSON_VAL_STR
Definition: json_generator.h:86
JSON_VAL_UINT_64
@ JSON_VAL_UINT_64
Definition: json_generator.h:89
json_str
Definition: json_generator.h:95
JSON_VAL_UINT
@ JSON_VAL_UINT
Definition: json_generator.h:88
json_str::len
size_t len
Definition: json_generator.h:97
json_start_object
int json_start_object(struct json_str *jptr)
Start a new JSON object.
json_push_object
int json_push_object(struct json_str *jptr, const char *name)
Start a new composite object.
json_push_array_object
int json_push_array_object(struct json_str *jptr, const char *name)
Start a JSON array object.
JSON_VAL_INT
@ JSON_VAL_INT
Definition: json_generator.h:87
json_str_init
void json_str_init(struct json_str *jptr, char *buff, int len)
Initialize the JSON generator.
json_close_object
int json_close_object(struct json_str *jptr)
Close JSON object.
JSON_VAL_NULL
@ JSON_VAL_NULL
Definition: json_generator.h:92
json_start_array
int json_start_array(struct json_str *jptr)
Start a JSON array.
json_data_types
json_data_types
Definition: json_generator.h:85