client/server: various bug fixes
[fio.git] / json.h
CommitLineData
cc372b17
SL
1#ifndef __JSON__H
2#define __JSON__H
a666cab8
JA
3
4#include "lib/output_buffer.h"
5
cc372b17
SL
6struct json_object;
7struct json_array;
8struct json_pair;
9
10#define JSON_TYPE_STRING 0
11#define JSON_TYPE_INTEGER 1
12#define JSON_TYPE_FLOAT 2
13#define JSON_TYPE_OBJECT 3
14#define JSON_TYPE_ARRAY 4
15#define JSON_PARENT_TYPE_PAIR 0
16#define JSON_PARENT_TYPE_ARRAY 1
17struct json_value {
18 int type;
19 union {
ee2e5717 20 long long integer_number;
cc372b17
SL
21 double float_number;
22 char *string;
23 struct json_object *object;
24 struct json_array *array;
25 };
26 int parent_type;
27 union {
28 struct json_pair *parent_pair;
29 struct json_array *parent_array;
30 };
31};
32
33struct json_array {
34 struct json_value **values;
35 int value_cnt;
36 struct json_value *parent;
37};
38
39struct json_object {
40 struct json_pair **pairs;
41 int pair_cnt;
42 struct json_value *parent;
43};
44
45struct json_pair {
46 char *name;
47 struct json_value *value;
48 struct json_object *parent;
49};
50
51struct json_object *json_create_object(void);
52struct json_array *json_create_array(void);
53
54void json_free_object(struct json_object *obj);
55
56int json_object_add_value_type(struct json_object *obj, const char *name, int type, ...);
57#define json_object_add_value_int(obj, name, val) \
a606a802 58 json_object_add_value_type((obj), name, JSON_TYPE_INTEGER, (long long) (val))
cc372b17
SL
59#define json_object_add_value_float(obj, name, val) \
60 json_object_add_value_type((obj), name, JSON_TYPE_FLOAT, (val))
61#define json_object_add_value_string(obj, name, val) \
62 json_object_add_value_type((obj), name, JSON_TYPE_STRING, (val))
63#define json_object_add_value_object(obj, name, val) \
64 json_object_add_value_type((obj), name, JSON_TYPE_OBJECT, (val))
65#define json_object_add_value_array(obj, name, val) \
66 json_object_add_value_type((obj), name, JSON_TYPE_ARRAY, (val))
67int json_array_add_value_type(struct json_array *array, int type, ...);
68#define json_array_add_value_int(obj, val) \
69 json_array_add_value_type((obj), JSON_TYPE_INTEGER, (val))
70#define json_array_add_value_float(obj, val) \
71 json_array_add_value_type((obj), JSON_TYPE_FLOAT, (val))
72#define json_array_add_value_string(obj, val) \
73 json_array_add_value_type((obj), JSON_TYPE_STRING, (val))
74#define json_array_add_value_object(obj, val) \
75 json_array_add_value_type((obj), JSON_TYPE_OBJECT, (val))
76#define json_array_add_value_array(obj, val) \
77 json_array_add_value_type((obj), JSON_TYPE_ARRAY, (val))
78
952b05e0
CF
79#define json_array_last_value_object(obj) \
80 (obj->values[obj->value_cnt - 1]->object)
81
a666cab8 82void json_print_object(struct json_object *obj, struct buf_output *out);
cc372b17 83#endif