xref: /unit/src/nxt_conf.h (revision 208:7d1017bd0f6c)
1 
2 /*
3  * Copyright (C) Igor Sysoev
4  * Copyright (C) Valentin V. Bartenev
5  * Copyright (C) NGINX, Inc.
6  */
7 
8 #ifndef _NXT_CONF_INCLUDED_
9 #define _NXT_CONF_INCLUDED_
10 
11 
12 #define NXT_CONF_NULL     0x01
13 #define NXT_CONF_BOOLEAN  0x02
14 #define NXT_CONF_INTEGER  0x04
15 #define NXT_CONF_NUMBER   0x08
16 #define NXT_CONF_STRING   0x10
17 #define NXT_CONF_ARRAY    0x20
18 #define NXT_CONF_OBJECT   0x40
19 
20 
21 typedef struct nxt_conf_value_s  nxt_conf_value_t;
22 typedef struct nxt_conf_op_s     nxt_conf_op_t;
23 
24 
25 typedef struct {
26     u_char               *pos;
27     u_char               *detail;
28 } nxt_conf_json_error_t;
29 
30 
31 typedef enum {
32     NXT_CONF_MAP_INT8,
33     NXT_CONF_MAP_INT32,
34     NXT_CONF_MAP_INT64,
35     NXT_CONF_MAP_INT,
36     NXT_CONF_MAP_SIZE,
37     NXT_CONF_MAP_OFF,
38     NXT_CONF_MAP_MSEC,
39     NXT_CONF_MAP_DOUBLE,
40     NXT_CONF_MAP_STR,
41     NXT_CONF_MAP_PTR,
42 } nxt_conf_map_type_t;
43 
44 
45 typedef struct {
46     nxt_str_t            name;
47     nxt_conf_map_type_t  type;
48     size_t               offset;
49 } nxt_conf_map_t;
50 
51 
52 typedef struct {
53     uint32_t             level;
54     uint8_t              more_space;  /* 1 bit. */
55 } nxt_conf_json_pretty_t;
56 
57 
58 nxt_uint_t nxt_conf_type(nxt_conf_value_t *value);
59 
60 nxt_conf_value_t *nxt_conf_get_path(nxt_conf_value_t *value, nxt_str_t *path);
61 nxt_conf_value_t *nxt_conf_get_object_member(nxt_conf_value_t *value,
62     nxt_str_t *name, uint32_t *index);
63 nxt_conf_value_t *nxt_conf_next_object_member(nxt_conf_value_t *value,
64     nxt_str_t *name, uint32_t *next);
65 
66 nxt_int_t nxt_conf_map_object(nxt_conf_value_t *value, nxt_conf_map_t *map,
67     nxt_uint_t n, void *data);
68 
69 nxt_int_t nxt_conf_op_compile(nxt_mp_t *mp, nxt_conf_op_t **ops,
70     nxt_conf_value_t *root, nxt_str_t *path, nxt_conf_value_t *value);
71 nxt_conf_value_t *nxt_conf_clone(nxt_mp_t *mp, nxt_conf_op_t *op,
72     nxt_conf_value_t *value);
73 
74 nxt_conf_value_t *nxt_conf_json_parse(nxt_mp_t *mp, u_char *start, u_char *end,
75     nxt_conf_json_error_t *error);
76 
77 #define nxt_conf_json_parse_str(mp, str)                                      \
78     nxt_conf_json_parse(mp, (str)->start, (str)->start + (str)->length, NULL)
79 
80 size_t nxt_conf_json_length(nxt_conf_value_t *value,
81     nxt_conf_json_pretty_t *pretty);
82 u_char *nxt_conf_json_print(u_char *p, nxt_conf_value_t *value,
83     nxt_conf_json_pretty_t *pretty);
84 void nxt_conf_json_position(u_char *start, u_char *pos, nxt_uint_t *line,
85     nxt_uint_t *column);
86 
87 nxt_int_t nxt_conf_validate(nxt_conf_value_t *value);
88 
89 void nxt_conf_get_string(nxt_conf_value_t *value, nxt_str_t *str);
90 
91 // FIXME reimplement and reorder functions below
92 nxt_uint_t nxt_conf_object_members_count(nxt_conf_value_t *value);
93 nxt_conf_value_t *nxt_conf_create_object(nxt_mp_t *mp, nxt_uint_t count);
94 void nxt_conf_set_member(nxt_conf_value_t *object, nxt_str_t *name,
95     nxt_conf_value_t *value, uint32_t index);
96 void nxt_conf_set_member_string(nxt_conf_value_t *object, nxt_str_t *name,
97     nxt_str_t *value, uint32_t index);
98 void nxt_conf_set_member_integer(nxt_conf_value_t *object, nxt_str_t *name,
99     int64_t value, uint32_t index);
100 
101 
102 #endif /* _NXT_CONF_INCLUDED_ */
103