X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=json.h;h=66bb06b1f17024b6759b585dfc5d9b9afcfa0326;hp=bcc712cd4d414b91aeb923ae69c3b9bcd8a4c0b9;hb=dc4729e3ef6a9116d7cd30e96e4f5863883e5bd7;hpb=3d2d14bcb844e72809192311369a642c5d415472 diff --git a/json.h b/json.h index bcc712cd..66bb06b1 100644 --- a/json.h +++ b/json.h @@ -49,28 +49,129 @@ struct json_array *json_create_array(void); void json_free_object(struct json_object *obj); -int json_object_add_value_type(struct json_object *obj, const char *name, int type, ...); -#define json_object_add_value_int(obj, name, val) \ - json_object_add_value_type((obj), name, JSON_TYPE_INTEGER, (long long) (val)) -#define json_object_add_value_float(obj, name, val) \ - json_object_add_value_type((obj), name, JSON_TYPE_FLOAT, (val)) -#define json_object_add_value_string(obj, name, val) \ - json_object_add_value_type((obj), name, JSON_TYPE_STRING, (val)) -#define json_object_add_value_object(obj, name, val) \ - json_object_add_value_type((obj), name, JSON_TYPE_OBJECT, (val)) -#define json_object_add_value_array(obj, name, val) \ - json_object_add_value_type((obj), name, JSON_TYPE_ARRAY, (val)) -int json_array_add_value_type(struct json_array *array, int type, ...); -#define json_array_add_value_int(obj, val) \ - json_array_add_value_type((obj), JSON_TYPE_INTEGER, (val)) -#define json_array_add_value_float(obj, val) \ - json_array_add_value_type((obj), JSON_TYPE_FLOAT, (val)) -#define json_array_add_value_string(obj, val) \ - json_array_add_value_type((obj), JSON_TYPE_STRING, (val)) -#define json_array_add_value_object(obj, val) \ - json_array_add_value_type((obj), JSON_TYPE_OBJECT, (val)) -#define json_array_add_value_array(obj, val) \ - json_array_add_value_type((obj), JSON_TYPE_ARRAY, (val)) +int json_object_add_value_type(struct json_object *obj, const char *name, + const struct json_value *val); + +static inline int json_object_add_value_int(struct json_object *obj, + const char *name, long long val) +{ + struct json_value arg = { + .type = JSON_TYPE_INTEGER, + }; + + arg.integer_number = val; + return json_object_add_value_type(obj, name, &arg); +} + +static inline int json_object_add_value_float(struct json_object *obj, + const char *name, double val) +{ + struct json_value arg = { + .type = JSON_TYPE_FLOAT, + }; + + arg.float_number = val; + return json_object_add_value_type(obj, name, &arg); +} + +static inline int json_object_add_value_string(struct json_object *obj, + const char *name, + const char *val) +{ + struct json_value arg = { + .type = JSON_TYPE_STRING, + }; + union { + const char *a; + char *b; + } string; + + string.a = val ? val : ""; + arg.string = string.b; + return json_object_add_value_type(obj, name, &arg); +} + +static inline int json_object_add_value_object(struct json_object *obj, + const char *name, + struct json_object *val) +{ + struct json_value arg = { + .type = JSON_TYPE_OBJECT, + }; + + arg.object = val; + return json_object_add_value_type(obj, name, &arg); +} + +static inline int json_object_add_value_array(struct json_object *obj, + const char *name, + struct json_array *val) +{ + struct json_value arg = { + .type = JSON_TYPE_ARRAY, + }; + + arg.array = val; + return json_object_add_value_type(obj, name, &arg); +} + +int json_array_add_value_type(struct json_array *array, + const struct json_value *val); + +static inline int json_array_add_value_int(struct json_array *obj, + long long val) +{ + struct json_value arg = { + .type = JSON_TYPE_INTEGER, + }; + + arg.integer_number = val; + return json_array_add_value_type(obj, &arg); +} + +static inline int json_array_add_value_float(struct json_array *obj, + double val) +{ + struct json_value arg = { + .type = JSON_TYPE_FLOAT, + }; + + arg.float_number = val; + return json_array_add_value_type(obj, &arg); +} + +static inline int json_array_add_value_string(struct json_array *obj, + const char *val) +{ + struct json_value arg = { + .type = JSON_TYPE_STRING, + }; + + arg.string = (char *)val; + return json_array_add_value_type(obj, &arg); +} + +static inline int json_array_add_value_object(struct json_array *obj, + struct json_object *val) +{ + struct json_value arg = { + .type = JSON_TYPE_OBJECT, + }; + + arg.object = val; + return json_array_add_value_type(obj, &arg); +} + +static inline int json_array_add_value_array(struct json_array *obj, + struct json_array *val) +{ + struct json_value arg = { + .type = JSON_TYPE_ARRAY, + }; + + arg.array = val; + return json_array_add_value_type(obj, &arg); +} #define json_array_last_value_object(obj) \ (obj->values[obj->value_cnt - 1]->object)