duckstation

duckstation, but archived from the revision just before upstream changed it to a proprietary software project, this version is the libre one
git clone https://git.neptards.moe/u3shit/duckstation.git
Log | Files | Refs | README | LICENSE

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 */