From 148dde19a604430aab97469de34a9101f2700bfb Mon Sep 17 00:00:00 2001 From: Ivar Fatland Date: Thu, 30 Jul 2026 17:03:47 +0200 Subject: [PATCH] add initial json parser definitions --- cig.h | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/cig.h b/cig.h index e1a157d..2a2d352 100644 --- a/cig.h +++ b/cig.h @@ -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;