X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=ucw-json%2Fjson.h;h=369598b705f9ab255eaeed90c2c715aa8103559c;hb=HEAD;hp=95bf50e048512c1a28ce14122e421e3ad0237b48;hpb=ba4f9938561e98eefcf1ab7fc2a6bbf5043407e7;p=libucw.git diff --git a/ucw-json/json.h b/ucw-json/json.h index 95bf50e0..369598b7 100644 --- a/ucw-json/json.h +++ b/ucw-json/json.h @@ -19,9 +19,14 @@ #define json_new ucw_json_new #define json_new_array ucw_json_new_array #define json_new_node ucw_json_new_node +#define json_new_number ucw_json_new_number #define json_new_object ucw_json_new_object #define json_next_token ucw_json_next_token #define json_next_value ucw_json_next_value +#define json_number_to_int ucw_json_number_to_int +#define json_number_to_s64 ucw_json_number_to_s64 +#define json_number_to_u64 ucw_json_number_to_u64 +#define json_number_to_uint ucw_json_number_to_uint #define json_object_get ucw_json_object_get #define json_object_set ucw_json_object_set #define json_parse ucw_json_parse @@ -186,8 +191,8 @@ static inline struct json_node *json_new_null(struct json_context *js UNUSED) static inline struct json_node *json_new_bool(struct json_context *js UNUSED, bool value) { static const struct json_node static_bool[2] = { - [0] = { .type = JSON_BOOLEAN, .boolean = 0 }, - [1] = { .type = JSON_BOOLEAN, .boolean = 1 }, + [0] = { .type = JSON_BOOLEAN, { .boolean = 0 } }, + [1] = { .type = JSON_BOOLEAN, { .boolean = 1 } }, }; return (struct json_node *) &static_bool[value]; } @@ -195,7 +200,28 @@ static inline struct json_node *json_new_bool(struct json_context *js UNUSED, bo /** Creates a new numeric value. The @value must be a finite number. **/ struct json_node *json_new_number(struct json_context *js, double value); -/** Creates a new string value. The @value is kept only as a reference. **/ +/** + * Convert a numeric value to an `int`. Returns false if the value + * is not numeric or if it is too large for an int. + **/ +bool json_number_to_int(struct json_node *num, int *dest); + +/** Same as above, but for `uint`. **/ +bool json_number_to_uint(struct json_node *num, uint *dest); + +/** Same as above, but for `s64`. **/ +bool json_number_to_s64(struct json_node *num, s64 *dest); + +/** Same as above, but for `u64`. **/ +bool json_number_to_u64(struct json_node *num, u64 *dest); + +/** + * Creates a new string value. The @value is kept only as a reference. + * + * String values can contain an arbitrary UTF-8 string with no null + * characters. However, it is not recommended to use UTF-8 values outside + * the range of UniCode codepoints (0 to 0x10ffff). + **/ static inline struct json_node *json_new_string_ref(struct json_context *js, const char *value) { struct json_node *n = json_new_node(js, JSON_STRING);