Path: blob/master/dep/rcheevos/src/rapi/rc_api_common.h
4255 views
#ifndef RC_API_COMMON_H1#define RC_API_COMMON_H23#include "rc_api_request.h"45#include <stddef.h>6#include <time.h>78RC_BEGIN_C_DECLS910#define RC_CONTENT_TYPE_URLENCODED "application/x-www-form-urlencoded"1112typedef struct rc_api_url_builder_t {13char* write;14char* start;15char* end;16/* pointer to a preallocated rc_buffer_t */17rc_buffer_t* buffer;18int result;19}20rc_api_url_builder_t;2122void rc_url_builder_init(rc_api_url_builder_t* builder, rc_buffer_t* buffer, size_t estimated_size);23void rc_url_builder_append(rc_api_url_builder_t* builder, const char* data, size_t len);24const char* rc_url_builder_finalize(rc_api_url_builder_t* builder);2526extern rc_api_host_t g_host;2728#define RC_JSON_NEW_FIELD(n) {NULL,NULL,n,sizeof(n)-1,0}2930typedef struct rc_json_field_t {31const char* value_start;32const char* value_end;33const char* name;34size_t name_len;35uint32_t array_size;36}37rc_json_field_t;3839typedef struct rc_json_iterator_t {40const char* json;41const char* end;42}43rc_json_iterator_t;4445int rc_json_parse_server_response(rc_api_response_t* response, const rc_api_server_response_t* server_response, rc_json_field_t* fields, size_t field_count);46int rc_json_get_string(const char** out, rc_buffer_t* buffer, const rc_json_field_t* field, const char* field_name);47int rc_json_get_num(int32_t* out, const rc_json_field_t* field, const char* field_name);48int rc_json_get_unum(uint32_t* out, const rc_json_field_t* field, const char* field_name);49int rc_json_get_float(float* out, const rc_json_field_t* field, const char* field_name);50int rc_json_get_bool(int* out, const rc_json_field_t* field, const char* field_name);51int rc_json_get_datetime(time_t* out, const rc_json_field_t* field, const char* field_name);52void rc_json_get_optional_string(const char** out, rc_api_response_t* response, const rc_json_field_t* field, const char* field_name, const char* default_value);53void rc_json_get_optional_num(int32_t* out, const rc_json_field_t* field, const char* field_name, int default_value);54void rc_json_get_optional_unum(uint32_t* out, const rc_json_field_t* field, const char* field_name, uint32_t default_value);55void rc_json_get_optional_float(float* out, const rc_json_field_t* field, const char* field_name, float default_value);56void rc_json_get_optional_bool(int* out, const rc_json_field_t* field, const char* field_name, int default_value);57int rc_json_get_optional_array(uint32_t* num_entries, rc_json_field_t* iterator, const rc_json_field_t* field, const char* field_name);58int rc_json_get_required_string(const char** out, rc_api_response_t* response, const rc_json_field_t* field, const char* field_name);59int rc_json_get_required_num(int32_t* out, rc_api_response_t* response, const rc_json_field_t* field, const char* field_name);60int rc_json_get_required_unum(uint32_t* out, rc_api_response_t* response, const rc_json_field_t* field, const char* field_name);61int rc_json_get_required_float(float* out, rc_api_response_t* response, const rc_json_field_t* field, const char* field_name);62int rc_json_get_required_bool(int* out, rc_api_response_t* response, const rc_json_field_t* field, const char* field_name);63int rc_json_get_required_datetime(time_t* out, rc_api_response_t* response, const rc_json_field_t* field, const char* field_name);64int rc_json_get_required_object(rc_json_field_t* fields, size_t field_count, rc_api_response_t* response, rc_json_field_t* field, const char* field_name);65int rc_json_get_required_unum_array(uint32_t** entries, uint32_t* num_entries, rc_api_response_t* response, const rc_json_field_t* field, const char* field_name);66int rc_json_get_required_array(uint32_t* num_entries, rc_json_field_t* array_field, rc_api_response_t* response, const rc_json_field_t* field, const char* field_name);67int rc_json_get_array_entry_object(rc_json_field_t* fields, size_t field_count, rc_json_iterator_t* iterator);68int rc_json_get_next_object_field(rc_json_iterator_t* iterator, rc_json_field_t* field);69int rc_json_get_object_string_length(const char* json);7071void rc_json_extract_filename(rc_json_field_t* field);7273void rc_url_builder_append_encoded_str(rc_api_url_builder_t* builder, const char* str);74void rc_url_builder_append_num_param(rc_api_url_builder_t* builder, const char* param, int32_t value);75void rc_url_builder_append_unum_param(rc_api_url_builder_t* builder, const char* param, uint32_t value);76void rc_url_builder_append_str_param(rc_api_url_builder_t* builder, const char* param, const char* value);7778const char* rc_api_default_host(void);79void rc_api_url_build_dorequest_url(rc_api_request_t* request, const rc_api_host_t* host);80int rc_api_url_build_dorequest(rc_api_url_builder_t* builder, const char* api, const char* username, const char* api_token);8182const char* rc_api_build_avatar_url(rc_buffer_t* buffer, uint32_t image_type, const char* image_name);8384RC_END_C_DECLS8586#endif /* RC_API_COMMON_H */878889