xref: /aosp_15_r20/external/mesa3d/src/util/parson.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker  SPDX-License-Identifier: MIT
3*61046927SAndroid Build Coastguard Worker 
4*61046927SAndroid Build Coastguard Worker  Parson 1.5.3 (https://github.com/kgabis/parson)
5*61046927SAndroid Build Coastguard Worker  Copyright (c) 2012 - 2023 Krzysztof Gabis
6*61046927SAndroid Build Coastguard Worker 
7*61046927SAndroid Build Coastguard Worker  Permission is hereby granted, free of charge, to any person obtaining a copy
8*61046927SAndroid Build Coastguard Worker  of this software and associated documentation files (the "Software"), to deal
9*61046927SAndroid Build Coastguard Worker  in the Software without restriction, including without limitation the rights
10*61046927SAndroid Build Coastguard Worker  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11*61046927SAndroid Build Coastguard Worker  copies of the Software, and to permit persons to whom the Software is
12*61046927SAndroid Build Coastguard Worker  furnished to do so, subject to the following conditions:
13*61046927SAndroid Build Coastguard Worker 
14*61046927SAndroid Build Coastguard Worker  The above copyright notice and this permission notice shall be included in
15*61046927SAndroid Build Coastguard Worker  all copies or substantial portions of the Software.
16*61046927SAndroid Build Coastguard Worker 
17*61046927SAndroid Build Coastguard Worker  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18*61046927SAndroid Build Coastguard Worker  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19*61046927SAndroid Build Coastguard Worker  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20*61046927SAndroid Build Coastguard Worker  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21*61046927SAndroid Build Coastguard Worker  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22*61046927SAndroid Build Coastguard Worker  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23*61046927SAndroid Build Coastguard Worker  THE SOFTWARE.
24*61046927SAndroid Build Coastguard Worker */
25*61046927SAndroid Build Coastguard Worker 
26*61046927SAndroid Build Coastguard Worker #ifndef parson_parson_h
27*61046927SAndroid Build Coastguard Worker #define parson_parson_h
28*61046927SAndroid Build Coastguard Worker 
29*61046927SAndroid Build Coastguard Worker #ifdef __cplusplus
30*61046927SAndroid Build Coastguard Worker extern "C"
31*61046927SAndroid Build Coastguard Worker {
32*61046927SAndroid Build Coastguard Worker #endif
33*61046927SAndroid Build Coastguard Worker #if 0
34*61046927SAndroid Build Coastguard Worker } /* unconfuse xcode */
35*61046927SAndroid Build Coastguard Worker #endif
36*61046927SAndroid Build Coastguard Worker 
37*61046927SAndroid Build Coastguard Worker #define PARSON_VERSION_MAJOR 1
38*61046927SAndroid Build Coastguard Worker #define PARSON_VERSION_MINOR 5
39*61046927SAndroid Build Coastguard Worker #define PARSON_VERSION_PATCH 3
40*61046927SAndroid Build Coastguard Worker 
41*61046927SAndroid Build Coastguard Worker #define PARSON_VERSION_STRING "1.5.3"
42*61046927SAndroid Build Coastguard Worker 
43*61046927SAndroid Build Coastguard Worker #include <stddef.h>   /* size_t */
44*61046927SAndroid Build Coastguard Worker 
45*61046927SAndroid Build Coastguard Worker /* Types and enums */
46*61046927SAndroid Build Coastguard Worker typedef struct json_object_t JSON_Object;
47*61046927SAndroid Build Coastguard Worker typedef struct json_array_t  JSON_Array;
48*61046927SAndroid Build Coastguard Worker typedef struct json_value_t  JSON_Value;
49*61046927SAndroid Build Coastguard Worker 
50*61046927SAndroid Build Coastguard Worker enum json_value_type {
51*61046927SAndroid Build Coastguard Worker     JSONError   = -1,
52*61046927SAndroid Build Coastguard Worker     JSONNull    = 1,
53*61046927SAndroid Build Coastguard Worker     JSONString  = 2,
54*61046927SAndroid Build Coastguard Worker     JSONNumber  = 3,
55*61046927SAndroid Build Coastguard Worker     JSONObject  = 4,
56*61046927SAndroid Build Coastguard Worker     JSONArray   = 5,
57*61046927SAndroid Build Coastguard Worker     JSONBoolean = 6
58*61046927SAndroid Build Coastguard Worker };
59*61046927SAndroid Build Coastguard Worker typedef int JSON_Value_Type;
60*61046927SAndroid Build Coastguard Worker 
61*61046927SAndroid Build Coastguard Worker enum json_result_t {
62*61046927SAndroid Build Coastguard Worker     JSONSuccess = 0,
63*61046927SAndroid Build Coastguard Worker     JSONFailure = -1
64*61046927SAndroid Build Coastguard Worker };
65*61046927SAndroid Build Coastguard Worker typedef int JSON_Status;
66*61046927SAndroid Build Coastguard Worker 
67*61046927SAndroid Build Coastguard Worker typedef void * (*JSON_Malloc_Function)(size_t);
68*61046927SAndroid Build Coastguard Worker typedef void   (*JSON_Free_Function)(void *);
69*61046927SAndroid Build Coastguard Worker 
70*61046927SAndroid Build Coastguard Worker /* A function used for serializing numbers (see json_set_number_serialization_function).
71*61046927SAndroid Build Coastguard Worker    If 'buf' is null then it should return number of bytes that would've been written
72*61046927SAndroid Build Coastguard Worker    (but not more than PARSON_NUM_BUF_SIZE).
73*61046927SAndroid Build Coastguard Worker */
74*61046927SAndroid Build Coastguard Worker typedef int (*JSON_Number_Serialization_Function)(double num, char *buf);
75*61046927SAndroid Build Coastguard Worker 
76*61046927SAndroid Build Coastguard Worker /* Call only once, before calling any other function from parson API. If not called, malloc and free
77*61046927SAndroid Build Coastguard Worker    from stdlib will be used for all allocations */
78*61046927SAndroid Build Coastguard Worker void json_set_allocation_functions(JSON_Malloc_Function malloc_fun, JSON_Free_Function free_fun);
79*61046927SAndroid Build Coastguard Worker 
80*61046927SAndroid Build Coastguard Worker /* Sets if slashes should be escaped or not when serializing JSON. By default slashes are escaped.
81*61046927SAndroid Build Coastguard Worker  This function sets a global setting and is not thread safe. */
82*61046927SAndroid Build Coastguard Worker void json_set_escape_slashes(int escape_slashes);
83*61046927SAndroid Build Coastguard Worker 
84*61046927SAndroid Build Coastguard Worker /* Sets float format used for serialization of numbers.
85*61046927SAndroid Build Coastguard Worker    Make sure it can't serialize to a string longer than PARSON_NUM_BUF_SIZE.
86*61046927SAndroid Build Coastguard Worker    If format is null then the default format is used. */
87*61046927SAndroid Build Coastguard Worker void json_set_float_serialization_format(const char *format);
88*61046927SAndroid Build Coastguard Worker 
89*61046927SAndroid Build Coastguard Worker /* Sets a function that will be used for serialization of numbers.
90*61046927SAndroid Build Coastguard Worker    If function is null then the default serialization function is used. */
91*61046927SAndroid Build Coastguard Worker void json_set_number_serialization_function(JSON_Number_Serialization_Function fun);
92*61046927SAndroid Build Coastguard Worker 
93*61046927SAndroid Build Coastguard Worker /* Parses first JSON value in a file, returns NULL in case of error */
94*61046927SAndroid Build Coastguard Worker JSON_Value * json_parse_file(const char *filename);
95*61046927SAndroid Build Coastguard Worker 
96*61046927SAndroid Build Coastguard Worker /* Parses first JSON value in a file and ignores comments (/ * * / and //),
97*61046927SAndroid Build Coastguard Worker    returns NULL in case of error */
98*61046927SAndroid Build Coastguard Worker JSON_Value * json_parse_file_with_comments(const char *filename);
99*61046927SAndroid Build Coastguard Worker 
100*61046927SAndroid Build Coastguard Worker /*  Parses first JSON value in a string, returns NULL in case of error */
101*61046927SAndroid Build Coastguard Worker JSON_Value * json_parse_string(const char *string);
102*61046927SAndroid Build Coastguard Worker 
103*61046927SAndroid Build Coastguard Worker /*  Parses first JSON value in a string and ignores comments (/ * * / and //),
104*61046927SAndroid Build Coastguard Worker     returns NULL in case of error */
105*61046927SAndroid Build Coastguard Worker JSON_Value * json_parse_string_with_comments(const char *string);
106*61046927SAndroid Build Coastguard Worker 
107*61046927SAndroid Build Coastguard Worker /* Serialization */
108*61046927SAndroid Build Coastguard Worker size_t      json_serialization_size(const JSON_Value *value); /* returns 0 on fail */
109*61046927SAndroid Build Coastguard Worker JSON_Status json_serialize_to_buffer(const JSON_Value *value, char *buf, size_t buf_size_in_bytes);
110*61046927SAndroid Build Coastguard Worker JSON_Status json_serialize_to_file(const JSON_Value *value, const char *filename);
111*61046927SAndroid Build Coastguard Worker char *      json_serialize_to_string(const JSON_Value *value);
112*61046927SAndroid Build Coastguard Worker 
113*61046927SAndroid Build Coastguard Worker /* Pretty serialization */
114*61046927SAndroid Build Coastguard Worker size_t      json_serialization_size_pretty(const JSON_Value *value); /* returns 0 on fail */
115*61046927SAndroid Build Coastguard Worker JSON_Status json_serialize_to_buffer_pretty(const JSON_Value *value, char *buf, size_t buf_size_in_bytes);
116*61046927SAndroid Build Coastguard Worker JSON_Status json_serialize_to_file_pretty(const JSON_Value *value, const char *filename);
117*61046927SAndroid Build Coastguard Worker char *      json_serialize_to_string_pretty(const JSON_Value *value);
118*61046927SAndroid Build Coastguard Worker 
119*61046927SAndroid Build Coastguard Worker void        json_free_serialized_string(char *string); /* frees string from json_serialize_to_string and json_serialize_to_string_pretty */
120*61046927SAndroid Build Coastguard Worker 
121*61046927SAndroid Build Coastguard Worker /* Comparing */
122*61046927SAndroid Build Coastguard Worker int  json_value_equals(const JSON_Value *a, const JSON_Value *b);
123*61046927SAndroid Build Coastguard Worker 
124*61046927SAndroid Build Coastguard Worker /* Validation
125*61046927SAndroid Build Coastguard Worker    This is *NOT* JSON Schema. It validates json by checking if object have identically
126*61046927SAndroid Build Coastguard Worker    named fields with matching types.
127*61046927SAndroid Build Coastguard Worker    For example schema {"name":"", "age":0} will validate
128*61046927SAndroid Build Coastguard Worker    {"name":"Joe", "age":25} and {"name":"Joe", "age":25, "gender":"m"},
129*61046927SAndroid Build Coastguard Worker    but not {"name":"Joe"} or {"name":"Joe", "age":"Cucumber"}.
130*61046927SAndroid Build Coastguard Worker    In case of arrays, only first value in schema is checked against all values in tested array.
131*61046927SAndroid Build Coastguard Worker    Empty objects ({}) validate all objects, empty arrays ([]) validate all arrays,
132*61046927SAndroid Build Coastguard Worker    null validates values of every type.
133*61046927SAndroid Build Coastguard Worker  */
134*61046927SAndroid Build Coastguard Worker JSON_Status json_validate(const JSON_Value *schema, const JSON_Value *value);
135*61046927SAndroid Build Coastguard Worker 
136*61046927SAndroid Build Coastguard Worker /*
137*61046927SAndroid Build Coastguard Worker  * JSON Object
138*61046927SAndroid Build Coastguard Worker  */
139*61046927SAndroid Build Coastguard Worker JSON_Value  * json_object_get_value  (const JSON_Object *object, const char *name);
140*61046927SAndroid Build Coastguard Worker const char  * json_object_get_string (const JSON_Object *object, const char *name);
141*61046927SAndroid Build Coastguard Worker size_t        json_object_get_string_len(const JSON_Object *object, const char *name); /* doesn't account for last null character */
142*61046927SAndroid Build Coastguard Worker JSON_Object * json_object_get_object (const JSON_Object *object, const char *name);
143*61046927SAndroid Build Coastguard Worker JSON_Array  * json_object_get_array  (const JSON_Object *object, const char *name);
144*61046927SAndroid Build Coastguard Worker double        json_object_get_number (const JSON_Object *object, const char *name); /* returns 0 on fail */
145*61046927SAndroid Build Coastguard Worker int           json_object_get_boolean(const JSON_Object *object, const char *name); /* returns -1 on fail */
146*61046927SAndroid Build Coastguard Worker 
147*61046927SAndroid Build Coastguard Worker /* dotget functions enable addressing values with dot notation in nested objects,
148*61046927SAndroid Build Coastguard Worker  just like in structs or c++/java/c# objects (e.g. objectA.objectB.value).
149*61046927SAndroid Build Coastguard Worker  Because valid names in JSON can contain dots, some values may be inaccessible
150*61046927SAndroid Build Coastguard Worker  this way. */
151*61046927SAndroid Build Coastguard Worker JSON_Value  * json_object_dotget_value  (const JSON_Object *object, const char *name);
152*61046927SAndroid Build Coastguard Worker const char  * json_object_dotget_string (const JSON_Object *object, const char *name);
153*61046927SAndroid Build Coastguard Worker size_t        json_object_dotget_string_len(const JSON_Object *object, const char *name); /* doesn't account for last null character */
154*61046927SAndroid Build Coastguard Worker JSON_Object * json_object_dotget_object (const JSON_Object *object, const char *name);
155*61046927SAndroid Build Coastguard Worker JSON_Array  * json_object_dotget_array  (const JSON_Object *object, const char *name);
156*61046927SAndroid Build Coastguard Worker double        json_object_dotget_number (const JSON_Object *object, const char *name); /* returns 0 on fail */
157*61046927SAndroid Build Coastguard Worker int           json_object_dotget_boolean(const JSON_Object *object, const char *name); /* returns -1 on fail */
158*61046927SAndroid Build Coastguard Worker 
159*61046927SAndroid Build Coastguard Worker /* Functions to get available names */
160*61046927SAndroid Build Coastguard Worker size_t        json_object_get_count   (const JSON_Object *object);
161*61046927SAndroid Build Coastguard Worker const char  * json_object_get_name    (const JSON_Object *object, size_t index);
162*61046927SAndroid Build Coastguard Worker JSON_Value  * json_object_get_value_at(const JSON_Object *object, size_t index);
163*61046927SAndroid Build Coastguard Worker JSON_Value  * json_object_get_wrapping_value(const JSON_Object *object);
164*61046927SAndroid Build Coastguard Worker 
165*61046927SAndroid Build Coastguard Worker /* Functions to check if object has a value with a specific name. Returned value is 1 if object has
166*61046927SAndroid Build Coastguard Worker  * a value and 0 if it doesn't. dothas functions behave exactly like dotget functions. */
167*61046927SAndroid Build Coastguard Worker int json_object_has_value        (const JSON_Object *object, const char *name);
168*61046927SAndroid Build Coastguard Worker int json_object_has_value_of_type(const JSON_Object *object, const char *name, JSON_Value_Type type);
169*61046927SAndroid Build Coastguard Worker 
170*61046927SAndroid Build Coastguard Worker int json_object_dothas_value        (const JSON_Object *object, const char *name);
171*61046927SAndroid Build Coastguard Worker int json_object_dothas_value_of_type(const JSON_Object *object, const char *name, JSON_Value_Type type);
172*61046927SAndroid Build Coastguard Worker 
173*61046927SAndroid Build Coastguard Worker /* Creates new name-value pair or frees and replaces old value with a new one.
174*61046927SAndroid Build Coastguard Worker  * json_object_set_value does not copy passed value so it shouldn't be freed afterwards. */
175*61046927SAndroid Build Coastguard Worker JSON_Status json_object_set_value(JSON_Object *object, const char *name, JSON_Value *value);
176*61046927SAndroid Build Coastguard Worker JSON_Status json_object_set_string(JSON_Object *object, const char *name, const char *string);
177*61046927SAndroid Build Coastguard Worker JSON_Status json_object_set_string_with_len(JSON_Object *object, const char *name, const char *string, size_t len);  /* length shouldn't include last null character */
178*61046927SAndroid Build Coastguard Worker JSON_Status json_object_set_number(JSON_Object *object, const char *name, double number);
179*61046927SAndroid Build Coastguard Worker JSON_Status json_object_set_boolean(JSON_Object *object, const char *name, int boolean);
180*61046927SAndroid Build Coastguard Worker JSON_Status json_object_set_null(JSON_Object *object, const char *name);
181*61046927SAndroid Build Coastguard Worker 
182*61046927SAndroid Build Coastguard Worker /* Works like dotget functions, but creates whole hierarchy if necessary.
183*61046927SAndroid Build Coastguard Worker  * json_object_dotset_value does not copy passed value so it shouldn't be freed afterwards. */
184*61046927SAndroid Build Coastguard Worker JSON_Status json_object_dotset_value(JSON_Object *object, const char *name, JSON_Value *value);
185*61046927SAndroid Build Coastguard Worker JSON_Status json_object_dotset_string(JSON_Object *object, const char *name, const char *string);
186*61046927SAndroid Build Coastguard Worker JSON_Status json_object_dotset_string_with_len(JSON_Object *object, const char *name, const char *string, size_t len); /* length shouldn't include last null character */
187*61046927SAndroid Build Coastguard Worker JSON_Status json_object_dotset_number(JSON_Object *object, const char *name, double number);
188*61046927SAndroid Build Coastguard Worker JSON_Status json_object_dotset_boolean(JSON_Object *object, const char *name, int boolean);
189*61046927SAndroid Build Coastguard Worker JSON_Status json_object_dotset_null(JSON_Object *object, const char *name);
190*61046927SAndroid Build Coastguard Worker 
191*61046927SAndroid Build Coastguard Worker /* Frees and removes name-value pair */
192*61046927SAndroid Build Coastguard Worker JSON_Status json_object_remove(JSON_Object *object, const char *name);
193*61046927SAndroid Build Coastguard Worker 
194*61046927SAndroid Build Coastguard Worker /* Works like dotget function, but removes name-value pair only on exact match. */
195*61046927SAndroid Build Coastguard Worker JSON_Status json_object_dotremove(JSON_Object *object, const char *key);
196*61046927SAndroid Build Coastguard Worker 
197*61046927SAndroid Build Coastguard Worker /* Removes all name-value pairs in object */
198*61046927SAndroid Build Coastguard Worker JSON_Status json_object_clear(JSON_Object *object);
199*61046927SAndroid Build Coastguard Worker 
200*61046927SAndroid Build Coastguard Worker /*
201*61046927SAndroid Build Coastguard Worker  *JSON Array
202*61046927SAndroid Build Coastguard Worker  */
203*61046927SAndroid Build Coastguard Worker JSON_Value  * json_array_get_value  (const JSON_Array *array, size_t index);
204*61046927SAndroid Build Coastguard Worker const char  * json_array_get_string (const JSON_Array *array, size_t index);
205*61046927SAndroid Build Coastguard Worker size_t        json_array_get_string_len(const JSON_Array *array, size_t index); /* doesn't account for last null character */
206*61046927SAndroid Build Coastguard Worker JSON_Object * json_array_get_object (const JSON_Array *array, size_t index);
207*61046927SAndroid Build Coastguard Worker JSON_Array  * json_array_get_array  (const JSON_Array *array, size_t index);
208*61046927SAndroid Build Coastguard Worker double        json_array_get_number (const JSON_Array *array, size_t index); /* returns 0 on fail */
209*61046927SAndroid Build Coastguard Worker int           json_array_get_boolean(const JSON_Array *array, size_t index); /* returns -1 on fail */
210*61046927SAndroid Build Coastguard Worker size_t        json_array_get_count  (const JSON_Array *array);
211*61046927SAndroid Build Coastguard Worker JSON_Value  * json_array_get_wrapping_value(const JSON_Array *array);
212*61046927SAndroid Build Coastguard Worker 
213*61046927SAndroid Build Coastguard Worker /* Frees and removes value at given index, does nothing and returns JSONFailure if index doesn't exist.
214*61046927SAndroid Build Coastguard Worker  * Order of values in array may change during execution.  */
215*61046927SAndroid Build Coastguard Worker JSON_Status json_array_remove(JSON_Array *array, size_t i);
216*61046927SAndroid Build Coastguard Worker 
217*61046927SAndroid Build Coastguard Worker /* Frees and removes from array value at given index and replaces it with given one.
218*61046927SAndroid Build Coastguard Worker  * Does nothing and returns JSONFailure if index doesn't exist.
219*61046927SAndroid Build Coastguard Worker  * json_array_replace_value does not copy passed value so it shouldn't be freed afterwards. */
220*61046927SAndroid Build Coastguard Worker JSON_Status json_array_replace_value(JSON_Array *array, size_t i, JSON_Value *value);
221*61046927SAndroid Build Coastguard Worker JSON_Status json_array_replace_string(JSON_Array *array, size_t i, const char* string);
222*61046927SAndroid Build Coastguard Worker JSON_Status json_array_replace_string_with_len(JSON_Array *array, size_t i, const char *string, size_t len); /* length shouldn't include last null character */
223*61046927SAndroid Build Coastguard Worker JSON_Status json_array_replace_number(JSON_Array *array, size_t i, double number);
224*61046927SAndroid Build Coastguard Worker JSON_Status json_array_replace_boolean(JSON_Array *array, size_t i, int boolean);
225*61046927SAndroid Build Coastguard Worker JSON_Status json_array_replace_null(JSON_Array *array, size_t i);
226*61046927SAndroid Build Coastguard Worker 
227*61046927SAndroid Build Coastguard Worker /* Frees and removes all values from array */
228*61046927SAndroid Build Coastguard Worker JSON_Status json_array_clear(JSON_Array *array);
229*61046927SAndroid Build Coastguard Worker 
230*61046927SAndroid Build Coastguard Worker /* Appends new value at the end of array.
231*61046927SAndroid Build Coastguard Worker  * json_array_append_value does not copy passed value so it shouldn't be freed afterwards. */
232*61046927SAndroid Build Coastguard Worker JSON_Status json_array_append_value(JSON_Array *array, JSON_Value *value);
233*61046927SAndroid Build Coastguard Worker JSON_Status json_array_append_string(JSON_Array *array, const char *string);
234*61046927SAndroid Build Coastguard Worker JSON_Status json_array_append_string_with_len(JSON_Array *array, const char *string, size_t len); /* length shouldn't include last null character */
235*61046927SAndroid Build Coastguard Worker JSON_Status json_array_append_number(JSON_Array *array, double number);
236*61046927SAndroid Build Coastguard Worker JSON_Status json_array_append_boolean(JSON_Array *array, int boolean);
237*61046927SAndroid Build Coastguard Worker JSON_Status json_array_append_null(JSON_Array *array);
238*61046927SAndroid Build Coastguard Worker 
239*61046927SAndroid Build Coastguard Worker /*
240*61046927SAndroid Build Coastguard Worker  *JSON Value
241*61046927SAndroid Build Coastguard Worker  */
242*61046927SAndroid Build Coastguard Worker JSON_Value * json_value_init_object (void);
243*61046927SAndroid Build Coastguard Worker JSON_Value * json_value_init_array  (void);
244*61046927SAndroid Build Coastguard Worker JSON_Value * json_value_init_string (const char *string); /* copies passed string */
245*61046927SAndroid Build Coastguard Worker JSON_Value * json_value_init_string_with_len(const char *string, size_t length); /* copies passed string, length shouldn't include last null character */
246*61046927SAndroid Build Coastguard Worker JSON_Value * json_value_init_number (double number);
247*61046927SAndroid Build Coastguard Worker JSON_Value * json_value_init_boolean(int boolean);
248*61046927SAndroid Build Coastguard Worker JSON_Value * json_value_init_null   (void);
249*61046927SAndroid Build Coastguard Worker JSON_Value * json_value_deep_copy   (const JSON_Value *value);
250*61046927SAndroid Build Coastguard Worker void         json_value_free        (JSON_Value *value);
251*61046927SAndroid Build Coastguard Worker 
252*61046927SAndroid Build Coastguard Worker JSON_Value_Type json_value_get_type   (const JSON_Value *value);
253*61046927SAndroid Build Coastguard Worker JSON_Object *   json_value_get_object (const JSON_Value *value);
254*61046927SAndroid Build Coastguard Worker JSON_Array  *   json_value_get_array  (const JSON_Value *value);
255*61046927SAndroid Build Coastguard Worker const char  *   json_value_get_string (const JSON_Value *value);
256*61046927SAndroid Build Coastguard Worker size_t          json_value_get_string_len(const JSON_Value *value); /* doesn't account for last null character */
257*61046927SAndroid Build Coastguard Worker double          json_value_get_number (const JSON_Value *value);
258*61046927SAndroid Build Coastguard Worker int             json_value_get_boolean(const JSON_Value *value);
259*61046927SAndroid Build Coastguard Worker JSON_Value  *   json_value_get_parent (const JSON_Value *value);
260*61046927SAndroid Build Coastguard Worker 
261*61046927SAndroid Build Coastguard Worker /* Same as above, but shorter */
262*61046927SAndroid Build Coastguard Worker JSON_Value_Type json_type   (const JSON_Value *value);
263*61046927SAndroid Build Coastguard Worker JSON_Object *   json_object (const JSON_Value *value);
264*61046927SAndroid Build Coastguard Worker JSON_Array  *   json_array  (const JSON_Value *value);
265*61046927SAndroid Build Coastguard Worker const char  *   json_string (const JSON_Value *value);
266*61046927SAndroid Build Coastguard Worker size_t          json_string_len(const JSON_Value *value); /* doesn't account for last null character */
267*61046927SAndroid Build Coastguard Worker double          json_number (const JSON_Value *value);
268*61046927SAndroid Build Coastguard Worker int             json_boolean(const JSON_Value *value);
269*61046927SAndroid Build Coastguard Worker 
270*61046927SAndroid Build Coastguard Worker #ifdef __cplusplus
271*61046927SAndroid Build Coastguard Worker }
272*61046927SAndroid Build Coastguard Worker #endif
273*61046927SAndroid Build Coastguard Worker 
274*61046927SAndroid Build Coastguard Worker #endif
275