rc_api_common.h (4687B)
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 #define RC_JSON_NEW_FIELD(n) {NULL,NULL,n,sizeof(n)-1,0} 28 29 typedef struct rc_json_field_t { 30 const char* value_start; 31 const char* value_end; 32 const char* name; 33 size_t name_len; 34 uint32_t array_size; 35 } 36 rc_json_field_t; 37 38 typedef struct rc_json_iterator_t { 39 const char* json; 40 const char* end; 41 } 42 rc_json_iterator_t; 43 44 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); 45 int rc_json_get_string(const char** out, rc_buffer_t* buffer, const rc_json_field_t* field, const char* field_name); 46 int rc_json_get_num(int32_t* out, const rc_json_field_t* field, const char* field_name); 47 int rc_json_get_unum(uint32_t* out, const rc_json_field_t* field, const char* field_name); 48 int rc_json_get_float(float* out, const rc_json_field_t* field, const char* field_name); 49 int rc_json_get_bool(int* out, const rc_json_field_t* field, const char* field_name); 50 int rc_json_get_datetime(time_t* out, const rc_json_field_t* field, const char* field_name); 51 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); 52 void rc_json_get_optional_num(int32_t* out, const rc_json_field_t* field, const char* field_name, int default_value); 53 void rc_json_get_optional_unum(uint32_t* out, const rc_json_field_t* field, const char* field_name, uint32_t default_value); 54 void rc_json_get_optional_float(float* out, const rc_json_field_t* field, const char* field_name, float default_value); 55 void rc_json_get_optional_bool(int* out, const rc_json_field_t* field, const char* field_name, int default_value); 56 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); 57 int rc_json_get_required_string(const char** out, rc_api_response_t* response, const rc_json_field_t* field, const char* field_name); 58 int rc_json_get_required_num(int32_t* out, rc_api_response_t* response, const rc_json_field_t* field, const char* field_name); 59 int rc_json_get_required_unum(uint32_t* out, rc_api_response_t* response, const rc_json_field_t* field, const char* field_name); 60 int rc_json_get_required_float(float* out, rc_api_response_t* response, const rc_json_field_t* field, const char* field_name); 61 int rc_json_get_required_bool(int* out, rc_api_response_t* response, const rc_json_field_t* field, const char* field_name); 62 int rc_json_get_required_datetime(time_t* out, rc_api_response_t* response, const rc_json_field_t* field, const char* field_name); 63 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); 64 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); 65 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); 66 int rc_json_get_array_entry_object(rc_json_field_t* fields, size_t field_count, rc_json_iterator_t* iterator); 67 int rc_json_get_next_object_field(rc_json_iterator_t* iterator, rc_json_field_t* field); 68 int rc_json_get_object_string_length(const char* json); 69 70 void rc_json_extract_filename(rc_json_field_t* field); 71 72 void rc_url_builder_append_encoded_str(rc_api_url_builder_t* builder, const char* str); 73 void rc_url_builder_append_num_param(rc_api_url_builder_t* builder, const char* param, int32_t value); 74 void rc_url_builder_append_unum_param(rc_api_url_builder_t* builder, const char* param, uint32_t value); 75 void rc_url_builder_append_str_param(rc_api_url_builder_t* builder, const char* param, const char* value); 76 77 void rc_api_url_build_dorequest_url(rc_api_request_t* request); 78 int rc_api_url_build_dorequest(rc_api_url_builder_t* builder, const char* api, const char* username, const char* api_token); 79 80 RC_END_C_DECLS 81 82 #endif /* RC_API_COMMON_H */