#include "cig.h" #include 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 } }