aboutsummaryrefslogtreecommitdiff
path: root/json.h
diff options
context:
space:
mode:
authorMartin Kagamino Lehoux <martin@lehoux.net>2025-07-23 14:42:48 +0200
committerMartin Kagamino Lehoux <martin@lehoux.net>2025-07-23 14:42:48 +0200
commit034d197e7eb3749f9f5b347595abdcfe2d086965 (patch)
treeba1237cdf7f9a98c39cc79b647baf89221de48be /json.h
parentb997e31ac151679a516fd76da45bb36931a13e40 (diff)
fix(json): Reduce memory usage and fix memory bugs
Diffstat (limited to 'json.h')
-rw-r--r--json.h27
1 files changed, 19 insertions, 8 deletions
diff --git a/json.h b/json.h
index 99e3e75..60e853c 100644
--- a/json.h
+++ b/json.h
@@ -9,16 +9,27 @@ typedef struct {
Vec values; // Vec<JSON>
size len;
} JSONObject;
+typedef enum {
+ JSON_NULL,
+ JSON_BOOL,
+ JSON_INTEGER,
+ JSON_FLOAT,
+ JSON_STRING,
+ JSON_ARRAY,
+ JSON_OBJECT
+} JSONType;
typedef struct {
- i32 *boolean;
- i32 *integer;
- f32 *floating;
- Vec *array; // Vec<JSON>
- Str *string;
- void *null;
- JSONObject *object;
+ JSONType type;
+ union {
+ bool boolean;
+ i32 integer;
+ f32 floating;
+ Vec array; // Vec<JSON>
+ Str string;
+ JSONObject object;
+ } as;
} JSON;
-JSON *JSONObject_get(JSONObject *obj, Str key);
+JSON *JSONObject_get(JSONObject obj, Str key);
i32 JSON_fprint(FILE *w, JSON json);
JSON JSON_parse(Arena *a, byte *src);
JSON JSON_Int(Arena *a, i32 val);