67 lines
1.7 KiB
C
67 lines
1.7 KiB
C
#include "cig.h"
|
|
#include <string.h>
|
|
|
|
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(scanner_t *scanner, allocator_t allocator) {
|
|
scan_whitespace(scanner);
|
|
if (scan_string_literal(scanner)) {
|
|
const char *buffer = scanner->value.string_literal;
|
|
size_t length = strlen(buffer);
|
|
char *buff_copy = allocator_alloc(allocator, length+1);
|
|
strncpy(buff_copy, buffer, length+1);
|
|
buff_copy[length] = '\0';
|
|
return (json_value_t) {
|
|
.type=json_type_string,
|
|
.string=(json_string_t) { .length=length, .buffer=buff_copy }
|
|
};
|
|
} else if (scan_f64(scanner)) {
|
|
return (json_value_t) {
|
|
.type=json_type_number,
|
|
.number=scanner->value.f64
|
|
};
|
|
} else if (scan_i64(scanner)) {
|
|
// TODO: is this needed?
|
|
return (json_value_t) {
|
|
.type=json_type_number,
|
|
.number=(double)scanner->value.i64
|
|
};
|
|
} else if (scan_literal(scanner, "true")) {
|
|
return (json_value_t) {
|
|
.type=json_type_boolean,
|
|
.boolean=true
|
|
};
|
|
} else if (scan_literal(scanner, "false")) {
|
|
return (json_value_t) {
|
|
.type=json_type_boolean,
|
|
.boolean=false
|
|
};
|
|
} else if (scan_literal(scanner, "null")) {
|
|
return (json_value_t) {
|
|
.type=json_type_null
|
|
};
|
|
} else if (scan_literal(scanner, "[")) {
|
|
json_parse(scanner, allocator);
|
|
// TODO
|
|
}
|
|
}
|