#ifndef LANDERCTL #define LANDERCTL #include #include typedef struct landerctl_cfg { const char *api_key; const char *server_url; const char *ca_certs_bundle; } landerctl_cfg; typedef enum landerctl_cfg_err { landerctl_cfg_err_ok = 0, landerctl_cfg_err_not_found, landerctl_cfg_err_invalid, landerctl_cfg_err_incomplete, } landerctl_cfg_err; /** * Try to parse the required config arguments from the config file * * @param out config to write values to. Existing values are overwritten * @param path path to config file */ landerctl_cfg_err landerctl_cfg_parse(landerctl_cfg *out, const char *path); typedef enum landerctl_mode { landerctl_mode_none = 0, landerctl_mode_short, landerctl_mode_paste, landerctl_mode_file, } landerctl_mode; typedef enum landerctl_err { landerctl_err_ok = 0, landerctl_err_not_found } landerctl_err; typedef struct landerctl_ctx { landerctl_cfg cfg; landerctl_mode mode; bool secure; bool verbose; const char *arg; const char *key; CURL *curl; struct curl_slist *headers; FILE *data_file; } landerctl_ctx; typedef struct landerctl_args { bool secure; bool verbose; landerctl_cfg cfg; struct { char **arr; int len; } args; landerctl_mode mode; } landerctl_args; typedef struct landerctl_curl { CURL *curl; struct curl_slist *headers; char err_msg[CURL_ERROR_SIZE]; } landerctl_curl; const char *landerctl_err_msg(landerctl_err err); void landerctl_set_common(landerctl_ctx *ctx); landerctl_err landerctl_post_short(landerctl_ctx *ctx); landerctl_err landerctl_post_paste(landerctl_ctx *ctx); landerctl_err landerctl_post_file(landerctl_ctx *ctx); int landerctl_cmd_short(landerctl_args *args); int landerctl_parse_args(landerctl_args *out, int argc, char **argv); #endif