Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
stenzek
GitHub Repository: stenzek/duckstation
Path: blob/master/dep/rcheevos/src/rapi/rc_api_common.h
4255 views
1
#ifndef RC_API_COMMON_H
2
#define RC_API_COMMON_H
3
4
#include "rc_api_request.h"
5
6
#include <stddef.h>
7
#include <time.h>
8
9
RC_BEGIN_C_DECLS
10
11
#define RC_CONTENT_TYPE_URLENCODED "application/x-www-form-urlencoded"
12
13
typedef struct rc_api_url_builder_t {
14
char* write;
15
char* start;
16
char* end;
17
/* pointer to a preallocated rc_buffer_t */
18
rc_buffer_t* buffer;
19
int result;
20
}
21
rc_api_url_builder_t;
22
23
void rc_url_builder_init(rc_api_url_builder_t* builder, rc_buffer_t* buffer, size_t estimated_size);
24
void rc_url_builder_append(rc_api_url_builder_t* builder, const char* data, size_t len);
25
const char* rc_url_builder_finalize(rc_api_url_builder_t* builder);
26
27
extern rc_api_host_t g_host;
28
29
#define RC_JSON_NEW_FIELD(n) {NULL,NULL,n,sizeof(n)-1,0}
30
31
typedef struct rc_json_field_t {
32
const char* value_start;
33
const char* value_end;
34
const char* name;
35
size_t name_len;
36
uint32_t array_size;
37
}
38
rc_json_field_t;
39
40
typedef struct rc_json_iterator_t {
41
const char* json;
42
const char* end;
43
}
44
rc_json_iterator_t;
45
46
int 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);
47
int rc_json_get_string(const char** out, rc_buffer_t* buffer, const rc_json_field_t* field, const char* field_name);
48
int rc_json_get_num(int32_t* out, const rc_json_field_t* field, const char* field_name);
49
int rc_json_get_unum(uint32_t* out, const rc_json_field_t* field, const char* field_name);
50
int rc_json_get_float(float* out, const rc_json_field_t* field, const char* field_name);
51
int rc_json_get_bool(int* out, const rc_json_field_t* field, const char* field_name);
52
int rc_json_get_datetime(time_t* out, const rc_json_field_t* field, const char* field_name);
53
void 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);
54
void rc_json_get_optional_num(int32_t* out, const rc_json_field_t* field, const char* field_name, int default_value);
55
void rc_json_get_optional_unum(uint32_t* out, const rc_json_field_t* field, const char* field_name, uint32_t default_value);
56
void rc_json_get_optional_float(float* out, const rc_json_field_t* field, const char* field_name, float default_value);
57
void rc_json_get_optional_bool(int* out, const rc_json_field_t* field, const char* field_name, int default_value);
58
int rc_json_get_optional_array(uint32_t* num_entries, rc_json_field_t* iterator, const rc_json_field_t* field, const char* field_name);
59
int rc_json_get_required_string(const char** out, rc_api_response_t* response, const rc_json_field_t* field, const char* field_name);
60
int rc_json_get_required_num(int32_t* out, rc_api_response_t* response, const rc_json_field_t* field, const char* field_name);
61
int rc_json_get_required_unum(uint32_t* out, rc_api_response_t* response, const rc_json_field_t* field, const char* field_name);
62
int rc_json_get_required_float(float* out, rc_api_response_t* response, const rc_json_field_t* field, const char* field_name);
63
int rc_json_get_required_bool(int* out, rc_api_response_t* response, const rc_json_field_t* field, const char* field_name);
64
int rc_json_get_required_datetime(time_t* out, rc_api_response_t* response, const rc_json_field_t* field, const char* field_name);
65
int 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);
66
int 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);
67
int 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);
68
int rc_json_get_array_entry_object(rc_json_field_t* fields, size_t field_count, rc_json_iterator_t* iterator);
69
int rc_json_get_next_object_field(rc_json_iterator_t* iterator, rc_json_field_t* field);
70
int rc_json_get_object_string_length(const char* json);
71
72
void rc_json_extract_filename(rc_json_field_t* field);
73
74
void rc_url_builder_append_encoded_str(rc_api_url_builder_t* builder, const char* str);
75
void rc_url_builder_append_num_param(rc_api_url_builder_t* builder, const char* param, int32_t value);
76
void rc_url_builder_append_unum_param(rc_api_url_builder_t* builder, const char* param, uint32_t value);
77
void rc_url_builder_append_str_param(rc_api_url_builder_t* builder, const char* param, const char* value);
78
79
const char* rc_api_default_host(void);
80
void rc_api_url_build_dorequest_url(rc_api_request_t* request, const rc_api_host_t* host);
81
int rc_api_url_build_dorequest(rc_api_url_builder_t* builder, const char* api, const char* username, const char* api_token);
82
83
const char* rc_api_build_avatar_url(rc_buffer_t* buffer, uint32_t image_type, const char* image_name);
84
85
RC_END_C_DECLS
86
87
#endif /* RC_API_COMMON_H */
88
89