src/cx/json.h

changeset 1072
c89283cd559b
parent 1067
7799addf475f
child 1077
911a154dd469
equal deleted inserted replaced
1071:028cb6d22197 1072:c89283cd559b
430 * Typedef for the json status enum. 430 * Typedef for the json status enum.
431 */ 431 */
432 typedef enum cx_json_status CxJsonStatus; 432 typedef enum cx_json_status CxJsonStatus;
433 433
434 /** 434 /**
435 * The JSON writer settings.
436 */
437 struct cx_json_writer_s {
438 bool pretty;
439 bool sort_members;
440 uint8_t frac_max_digits;
441 bool indent_space;
442 uint8_t indent;
443 bool wrap_array;
444 uint16_t wrap_threshold;
445 };
446
447 /**
448 * Typedef for the json writer.
449 */
450 typedef struct cx_json_writer_s CxJsonWriter;
451
452
453 /**
454 * Writes a JSON value to a buffer or stream.
455 *
456 * This function blocks until all data is written or an error when trying
457 * to write data occurs.
458 * The write operation is not atomic in the sense that it might happen
459 * that the data is only partially written when an error occurs with no
460 * way to indicate how much data was written.
461 * To avoid this problem, you can use a CxBuffer as \p target which is
462 * unlikely to fail a write operation and either use the buffer's flush
463 * feature to relay the data or use the data in the buffer manually to
464 * write it to the actual target.
465 *
466 * @param target the buffer or stream where to write to
467 * @param value the value that shall be written
468 * @param wfunc the write function to use
469 * @param settings formatting settings (or \c NULL to use a compact default)
470 * @return zero on success, non-zero when no or not all data could be written
471 */
472 cx_attr_nonnull_arg(1, 2, 3)
473 int cxJsonWrite(
474 void* target,
475 const CxJsonValue* value,
476 cx_write_func wfunc,
477 const CxJsonWriter* settings
478 );
479
480 /**
435 * Initializes the json interface. 481 * Initializes the json interface.
436 * 482 *
437 * @param json the json interface 483 * @param json the json interface
438 * @param allocator the allocator that shall be used for the produced values 484 * @param allocator the allocator that shall be used for the produced values
439 * @see cxJsonDestroy() 485 * @see cxJsonDestroy()
1148 cx_attr_nonnull 1194 cx_attr_nonnull
1149 cx_attr_nodiscard 1195 cx_attr_nodiscard
1150 CxIterator cxJsonArrIter(const CxJsonValue *value); 1196 CxIterator cxJsonArrIter(const CxJsonValue *value);
1151 1197
1152 /** 1198 /**
1199 * Returns an iterator over the JSON object members.
1200 *
1201 * The iterator yields values of type \c CxJsonObjValue* which
1202 * contain the name and value of the member.
1203 *
1204 * If the \p value is not a JSON object, the behavior is undefined.
1205 *
1206 * @param value the JSON value
1207 * @return an iterator over the object members
1208 * @see cxJsonIsObject()
1209 */
1210 cx_attr_nonnull
1211 cx_attr_nodiscard
1212 CxIterator cxJsonObjIter(const CxJsonValue *value);
1213
1214 /**
1153 * @copydoc cxJsonObjGet() 1215 * @copydoc cxJsonObjGet()
1154 */ 1216 */
1155 cx_attr_nonnull 1217 cx_attr_nonnull
1156 cx_attr_returns_nonnull 1218 cx_attr_returns_nonnull
1157 CxJsonValue *cx_json_obj_get_cxstr(const CxJsonValue *value, cxstring name); 1219 CxJsonValue *cx_json_obj_get_cxstr(const CxJsonValue *value, cxstring name);

mercurial