add initial json parser definitions
This commit is contained in:
@@ -327,6 +327,62 @@ bool scanner_print_errors(scanner_t *s, FILE *fp);
|
||||
bool looks_like_float(scanner_t *s);
|
||||
bool looks_like_int(scanner_t *s);
|
||||
|
||||
// json parser /////////////////////////////////////////////////////////////////
|
||||
|
||||
typedef enum json_type {
|
||||
json_type_array,
|
||||
json_type_boolean,
|
||||
json_type_null,
|
||||
json_type_number,
|
||||
json_type_object,
|
||||
json_type_string,
|
||||
count_json_type_t
|
||||
} json_type_t;
|
||||
|
||||
typedef struct json_string {
|
||||
const char *buffer;
|
||||
size_t length;
|
||||
} json_string_t;
|
||||
|
||||
struct json_pair;
|
||||
|
||||
typedef struct json_object {
|
||||
struct json_pair *pairs;
|
||||
size_t length;
|
||||
} json_object_t;
|
||||
|
||||
struct json_value;
|
||||
|
||||
typedef struct json_array {
|
||||
struct json_value *values;
|
||||
size_t length;
|
||||
} json_array_t;
|
||||
|
||||
typedef struct json_value {
|
||||
json_type_t type;
|
||||
union {
|
||||
bool boolean;
|
||||
double number;
|
||||
json_object_t object;
|
||||
json_array_t array;
|
||||
json_string_t string;
|
||||
};
|
||||
} json_value_t;
|
||||
|
||||
typedef struct json_pair {
|
||||
json_string_t key;
|
||||
json_value_t value;
|
||||
} json_pair_t;
|
||||
|
||||
bool json_as_array(json_value_t *value, json_array_t *array);
|
||||
bool json_as_boolean(json_value_t *value, bool *out_bool);
|
||||
bool json_as_null(json_value_t *value);
|
||||
bool json_as_number(json_value_t *value, double *out_double);
|
||||
bool json_as_object(json_value_t *value, json_object_t *out_object);
|
||||
bool json_as_string(json_value_t *value, json_string_t *out_string);
|
||||
bool json_obj_get(json_object_t *obj, json_string_t key, json_value_t *out_value);
|
||||
json_value_t *json_parse(const char *content, allocator_t allocator);
|
||||
|
||||
// string builder //////////////////////////////////////////////////////////////
|
||||
typedef struct string_builder_node {
|
||||
struct string_builder_node *next;
|
||||
|
||||
Reference in New Issue
Block a user