Mercurial > wgsdk
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 |
| rev | line source |
|---|---|
| 11 | 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 | 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 | 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 | 25 #endif |
| 26 | |
|
12
dd427b7cc459
json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents:
11
diff
changeset
|
27 #ifndef NXJSON_TYPE_U64 |
| 11 | 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 | 32 #endif |
| 33 | |
|
12
dd427b7cc459
json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents:
11
diff
changeset
|
34 #ifndef NXJSON_TYPE_S64 |
| 11 | 35 |
|
12
dd427b7cc459
json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents:
11
diff
changeset
|
36 #include <stdint.h> |
| 11 | 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 | 39 #endif |
| 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 | 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 | 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 | 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 | 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 | 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 | 84 |
| 85 | |
|
12
dd427b7cc459
json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents:
11
diff
changeset
|
86 #ifdef __cplusplus |
| 11 | 87 } |
| 88 #endif | |
| 89 | |
|
12
dd427b7cc459
json: replace with nxjson library
Paper <paper@paper.us.eu.org>
parents:
11
diff
changeset
|
90 #endif /* NXJSON_H */ |
