1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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
|