xref: /unit/src/nxt_conf.h (revision 121:18f69a84a231)
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 enum {
26     NXT_CONF_MAP_INT8,
27     NXT_CONF_MAP_INT32,
28     NXT_CONF_MAP_INT64,
29     NXT_CONF_MAP_INT,
30     NXT_CONF_MAP_SIZE,
31     NXT_CONF_MAP_OFF,
32     NXT_CONF_MAP_MSEC,
33     NXT_CONF_MAP_DOUBLE,
34     NXT_CONF_MAP_STR,
35     NXT_CONF_MAP_PTR,
36 } nxt_conf_map_type_t;
37 
38 
39 typedef struct {
40     nxt_str_t            name;
41     nxt_conf_map_type_t  type;
42     size_t               offset;
43 } nxt_conf_map_t;
44 
45 
46 typedef struct {
47     uint32_t             level;
48     uint8_t              more_space;  /* 1 bit. */
49 } nxt_conf_json_pretty_t;
50 
51 
52 nxt_uint_t nxt_conf_type(nxt_conf_value_t *value);
53 
54 nxt_conf_value_t *nxt_conf_get_path(nxt_conf_value_t *value, nxt_str_t *path);
55 nxt_conf_value_t *nxt_conf_get_object_member(nxt_conf_value_t *value,
56     nxt_str_t *name, uint32_t *index);
57 nxt_conf_value_t *nxt_conf_next_object_member(nxt_conf_value_t *value,
58     nxt_str_t *name, uint32_t *next);
59 
60 nxt_int_t nxt_conf_map_object(nxt_conf_value_t *value, nxt_conf_map_t *map,
61     void *data);
62 
63 nxt_int_t nxt_conf_op_compile(nxt_mp_t *mp, nxt_conf_op_t **ops,
64     nxt_conf_value_t *root, nxt_str_t *path, nxt_conf_value_t *value);
65 nxt_conf_value_t *nxt_conf_clone(nxt_mp_t *mp, nxt_conf_op_t *op,
66     nxt_conf_value_t *value);
67 
68 nxt_conf_value_t *nxt_conf_json_parse(nxt_mp_t *mp, u_char *start, u_char *end);
69 
70 #define nxt_conf_json_parse_str(mp, str)                                      \
71     nxt_conf_json_parse(mp, (str)->start, (str)->start + (str)->length)
72 
73 size_t nxt_conf_json_length(nxt_conf_value_t *value,
74     nxt_conf_json_pretty_t *pretty);
75 u_char *nxt_conf_json_print(u_char *p, nxt_conf_value_t *value,
76     nxt_conf_json_pretty_t *pretty);
77 
78 nxt_int_t nxt_conf_validate(nxt_conf_value_t *value);
79 
80 void nxt_conf_get_string(nxt_conf_value_t *value, nxt_str_t *str);
81 
82 // FIXME reimplement and reorder functions below
83 nxt_uint_t nxt_conf_object_members_count(nxt_conf_value_t *value);
84 nxt_conf_value_t *nxt_conf_create_object(nxt_mp_t *mp, nxt_uint_t count);
85 nxt_int_t nxt_conf_set_object_member(nxt_mp_t *mp, nxt_conf_value_t *object,
86     nxt_str_t *name, nxt_conf_value_t *value, uint32_t index);
87 
88 
89 #endif /* _NXT_CONF_INCLUDED_ */
90