aboutsummaryrefslogtreecommitdiff
path: root/mons_json/include
diff options
context:
space:
mode:
Diffstat (limited to 'mons_json/include')
-rw-r--r--mons_json/include/json.h52
1 files changed, 52 insertions, 0 deletions
diff --git a/mons_json/include/json.h b/mons_json/include/json.h
new file mode 100644
index 0000000..da4ee01
--- /dev/null
+++ b/mons_json/include/json.h
@@ -0,0 +1,52 @@
+#ifndef MONS_JSON_H
+#define MONS_JSON_H
+
+#include <stdbool.h>
+#include "hashmap.h"
+
+struct mons_json_value;
+union mons_json_entry;
+
+typedef struct mons_json_array {
+ struct mons_json_value *values;
+ unsigned int len;
+} mons_json_array;
+
+typedef union mons_json_value_data {
+ char *string;
+ float number;
+ mons_hashmap object;
+ mons_json_array array;
+ bool boolean;
+ void *null;
+} mons_json_value_data;
+
+typedef enum mons_json_value_type {
+ MONS_JSON_STRING,
+ MONS_JSON_NUMBER,
+ MONS_JSON_OBJECT,
+ MONS_JSON_ARRAY,
+ MONS_JSON_BOOL,
+ MONS_JSON_NULL,
+} mons_json_value_type;
+
+typedef struct mons_json_value {
+ mons_json_value_type type;
+ mons_json_value_data data;
+} mons_json_value;
+
+int mons_json_parse(char *json, mons_json_value *out);
+
+char *mons_json_to_string(mons_json_value json);
+
+void mons_json_free(mons_json_value json);
+
+int mons_json_get_value(mons_json_value json, char *name, mons_json_value *out);
+int mons_json_get_int(mons_json_value json, char *name, int *out);
+int mons_json_get_float(mons_json_value json, char *name, float *out);
+int mons_json_get_bool(mons_json_value json, char *name, bool *out);
+int mons_json_get_array(mons_json_value json, char *name, mons_json_array *out);
+int mons_json_get_object(mons_json_value json, char *name, mons_hashmap *out);
+int mons_json_get_string(mons_json_value json, char *name, char **out);
+
+#endif