annotate include/json.h @ 12:dd427b7cc459 default tip

json: replace with nxjson library more lightweight, reduces the binary size by about 40 kb
author Paper <paper@paper.us.eu.org>
date Fri, 15 Mar 2024 20:46:18 -0400
parents e6a594f16403
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
11
e6a594f16403 *: huge refactor
Paper <paper@paper.us.eu.org>
parents:
diff changeset
1 /*
12
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
2 * Copyright (c) 2013 Yaroslav Stavnichiy <yarosla@gmail.com>
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
3 *
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
4 * This file is part of NXJSON.
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
5 *
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
6 * NXJSON is free software: you can redistribute it and/or modify
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
7 * it under the terms of the GNU Lesser General Public License
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
8 * as published by the Free Software Foundation, either version 3
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
9 * of the License, or (at your option) any later version.
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
10 *
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
11 * NXJSON is distributed in the hope that it will be useful,
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
14 * GNU Lesser General Public License for more details.
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
15 *
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
16 * You should have received a copy of the GNU Lesser General Public
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
17 * License along with NXJSON. If not, see <http://www.gnu.org/licenses/>.
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
18 */
11
e6a594f16403 *: huge refactor
Paper <paper@paper.us.eu.org>
parents:
diff changeset
19
12
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
20 #ifndef NXJSON_H
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
21 #define NXJSON_H
11
e6a594f16403 *: huge refactor
Paper <paper@paper.us.eu.org>
parents:
diff changeset
22
12
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
23 #ifdef __cplusplus
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
24 extern "C" {
11
e6a594f16403 *: huge refactor
Paper <paper@paper.us.eu.org>
parents:
diff changeset
25 #endif
e6a594f16403 *: huge refactor
Paper <paper@paper.us.eu.org>
parents:
diff changeset
26
12
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
27 #ifndef NXJSON_TYPE_U64
11
e6a594f16403 *: huge refactor
Paper <paper@paper.us.eu.org>
parents:
diff changeset
28
12
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
29 #include <stdint.h>
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
30
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
31 typedef uint64_t nxjson_u64;
11
e6a594f16403 *: huge refactor
Paper <paper@paper.us.eu.org>
parents:
diff changeset
32 #endif
e6a594f16403 *: huge refactor
Paper <paper@paper.us.eu.org>
parents:
diff changeset
33
12
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
34 #ifndef NXJSON_TYPE_S64
11
e6a594f16403 *: huge refactor
Paper <paper@paper.us.eu.org>
parents:
diff changeset
35
12
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
36 #include <stdint.h>
11
e6a594f16403 *: huge refactor
Paper <paper@paper.us.eu.org>
parents:
diff changeset
37
12
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
38 typedef uint64_t nxjson_s64;
11
e6a594f16403 *: huge refactor
Paper <paper@paper.us.eu.org>
parents:
diff changeset
39 #endif
e6a594f16403 *: huge refactor
Paper <paper@paper.us.eu.org>
parents:
diff changeset
40
12
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
41 typedef enum nx_json_type {
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
42 NX_JSON_NULL, // this is null value
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
43 NX_JSON_OBJECT, // this is an object; properties can be found in child nodes
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
44 NX_JSON_ARRAY, // this is an array; items can be found in child nodes
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
45 NX_JSON_STRING, // this is a string; value can be found in text_value field
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
46 NX_JSON_INTEGER, // this is an integer; value can be found in int_value field
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
47 NX_JSON_DOUBLE, // this is a double; value can be found in dbl_value field
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
48 NX_JSON_BOOL // this is a boolean; value can be found in int_value field
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
49 } nx_json_type;
11
e6a594f16403 *: huge refactor
Paper <paper@paper.us.eu.org>
parents:
diff changeset
50
12
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
51 typedef struct nx_json {
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
52 nx_json_type type; // type of json node, see above
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
53 const char *key; // key of the property; for object's children only
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
54 union {
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
55 const char *text_value; // text value of STRING node
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
56 struct {
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
57 union {
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
58 nxjson_u64 u_value; // the value of INTEGER or BOOL node
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
59 nxjson_s64 s_value;
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
60 };
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
61 double dbl_value; // the value of DOUBLE node
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
62 } num;
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
63 struct { // children of OBJECT or ARRAY
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
64 int length;
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
65 struct nx_json *first;
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
66 struct nx_json *last;
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
67 } children;
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
68 };
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
69 struct nx_json *next; // points to next child
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
70 } nx_json;
11
e6a594f16403 *: huge refactor
Paper <paper@paper.us.eu.org>
parents:
diff changeset
71
12
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
72 typedef int (*nx_json_unicode_encoder)(unsigned int codepoint, char *p, char **endp);
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
73
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
74 extern nx_json_unicode_encoder nx_json_unicode_to_utf8;
11
e6a594f16403 *: huge refactor
Paper <paper@paper.us.eu.org>
parents:
diff changeset
75
12
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
76 const nx_json *nx_json_parse(char *text, nx_json_unicode_encoder encoder);
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
77
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
78 const nx_json *nx_json_parse_utf8(char *text);
11
e6a594f16403 *: huge refactor
Paper <paper@paper.us.eu.org>
parents:
diff changeset
79
12
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
80 void nx_json_free(const nx_json *js);
11
e6a594f16403 *: huge refactor
Paper <paper@paper.us.eu.org>
parents:
diff changeset
81
12
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
82 const nx_json *nx_json_get(const nx_json *json, const char *key); // get object's property by key
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
83 const nx_json *nx_json_item(const nx_json *json, int idx); // get array element by index
11
e6a594f16403 *: huge refactor
Paper <paper@paper.us.eu.org>
parents:
diff changeset
84
e6a594f16403 *: huge refactor
Paper <paper@paper.us.eu.org>
parents:
diff changeset
85
12
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
86 #ifdef __cplusplus
11
e6a594f16403 *: huge refactor
Paper <paper@paper.us.eu.org>
parents:
diff changeset
87 }
e6a594f16403 *: huge refactor
Paper <paper@paper.us.eu.org>
parents:
diff changeset
88 #endif
e6a594f16403 *: huge refactor
Paper <paper@paper.us.eu.org>
parents:
diff changeset
89
12
dd427b7cc459 json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents: 11
diff changeset
90 #endif /* NXJSON_H */