2024-12-20 09:13:59 -05:00
|
|
|
#include <jansson.h>
|
|
|
|
|
#include "json_helpers.h"
|
|
|
|
|
#include "game.h"
|
2024-12-22 00:07:16 -05:00
|
|
|
#include "string.h"
|
|
|
|
|
#include "heap.h"
|
2024-12-20 09:13:59 -05:00
|
|
|
|
|
|
|
|
json_t *get_json_object_value(json_t *obj, char *key)
|
|
|
|
|
{
|
|
|
|
|
json_t *value = json_object_get(obj, key);
|
|
|
|
|
THROW_ZERO(value, EXC_KEYERROR, "");
|
|
|
|
|
THROW_ZERO(json_is_object(value), EXC_ATTRIBUTEERROR, "");
|
|
|
|
|
return value;
|
|
|
|
|
}
|
|
|
|
|
|
2024-12-20 18:31:09 -05:00
|
|
|
bool get_json_boolean_value(json_t *obj, char *key)
|
2024-12-20 09:13:59 -05:00
|
|
|
{
|
|
|
|
|
json_t *value = json_object_get(obj, key);
|
|
|
|
|
THROW_ZERO(value, EXC_KEYERROR, "");
|
|
|
|
|
THROW_ZERO(json_is_boolean(value), EXC_ATTRIBUTEERROR, "");
|
2024-12-20 18:31:09 -05:00
|
|
|
bool i = json_boolean_value(value);
|
|
|
|
|
json_decref(value);
|
|
|
|
|
return i;
|
2024-12-20 09:13:59 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int get_json_integer_value(json_t *obj, char *key)
|
|
|
|
|
{
|
|
|
|
|
json_t *value = json_object_get(obj, key);
|
|
|
|
|
THROW_ZERO(value, EXC_KEYERROR, "");
|
|
|
|
|
THROW_ZERO(json_is_integer(value), EXC_ATTRIBUTEERROR, "");
|
2024-12-20 18:31:09 -05:00
|
|
|
int i = json_integer_value(value);
|
|
|
|
|
json_decref(value);
|
|
|
|
|
return i;
|
2024-12-20 09:13:59 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
float get_json_number_value(json_t *obj, char *key)
|
|
|
|
|
{
|
|
|
|
|
json_t *value = json_object_get(obj, key);
|
2024-12-20 18:31:09 -05:00
|
|
|
float f;
|
2024-12-20 09:13:59 -05:00
|
|
|
THROW_ZERO(value, EXC_KEYERROR, "");
|
|
|
|
|
THROW_ZERO(json_is_number(value), EXC_ATTRIBUTEERROR, "");
|
2024-12-20 18:31:09 -05:00
|
|
|
f = json_number_value(value);
|
|
|
|
|
json_decref(value);
|
|
|
|
|
return f;
|
2024-12-20 09:13:59 -05:00
|
|
|
}
|
|
|
|
|
|
2024-12-22 00:07:16 -05:00
|
|
|
string *get_json_string_value(json_t *obj, char *key)
|
2024-12-20 09:13:59 -05:00
|
|
|
{
|
2024-12-22 00:07:16 -05:00
|
|
|
string *s = heap_next_string();
|
2024-12-20 09:13:59 -05:00
|
|
|
json_t *value = json_object_get(obj, key);
|
2024-12-20 18:31:09 -05:00
|
|
|
THROW_ZERO(value, EXC_KEYERROR, key);
|
|
|
|
|
THROW_ZERO(json_is_string(value), EXC_ATTRIBUTEERROR, key);
|
2024-12-22 00:07:16 -05:00
|
|
|
strncpy(s->data, (char *)json_string_value(value), MAX_STRING_LENGTH);
|
2024-12-20 18:31:09 -05:00
|
|
|
json_decref(value);
|
|
|
|
|
return s;
|
2024-12-20 09:13:59 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
json_t *get_json_array_value(json_t *obj, char *key)
|
|
|
|
|
{
|
|
|
|
|
json_t *value = json_object_get(obj, key);
|
2024-12-20 18:31:09 -05:00
|
|
|
THROW_ZERO(value, EXC_KEYERROR, key);
|
|
|
|
|
THROW_ZERO(json_is_array(value), EXC_ATTRIBUTEERROR, key);
|
2024-12-20 09:13:59 -05:00
|
|
|
return value;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
json_t *get_json_array_index_object(json_t *array, int index)
|
|
|
|
|
{
|
|
|
|
|
json_t *value = json_array_get(array, index);
|
|
|
|
|
THROW_ZERO(value, EXC_INDEXERROR, "");
|
|
|
|
|
THROW_ZERO(json_is_object(value), EXC_ATTRIBUTEERROR, "");
|
|
|
|
|
return value;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int get_json_array_index_integer(json_t *array, int index)
|
|
|
|
|
{
|
2024-12-20 18:31:09 -05:00
|
|
|
int i;
|
2024-12-20 09:13:59 -05:00
|
|
|
json_t *value = json_array_get(array, index);
|
|
|
|
|
THROW_ZERO(value, EXC_INDEXERROR, "");
|
|
|
|
|
THROW_ZERO(json_is_integer(value), EXC_ATTRIBUTEERROR, "");
|
2024-12-20 18:31:09 -05:00
|
|
|
i = json_integer_value(value);
|
|
|
|
|
json_decref(value);
|
|
|
|
|
return i;
|
2024-12-20 09:13:59 -05:00
|
|
|
}
|