9 curl_url_cleanup(
static_cast<CURLU*>(
static_cast<
void*>(p)));
13 return Url_t{
static_cast<
char*>(
static_cast<
void*>(curl_url()))};
17 auto *new_curl_url = curl_url_dup(
static_cast<CURLU*>(
static_cast<
void*>(url.get())));
18 return Url_t{
static_cast<
char*>(
static_cast<
void*>(new_curl_url))};
27 static auto curl_urlset_wrapper(
void *url, CURLUPart part,
const char *arg)
noexcept ->
30 auto code = curl_url_set(
static_cast<CURLU*>(url), part, arg, 0);
33 case CURLUE_MALFORMED_INPUT:
35 case CURLUE_BAD_PORT_NUMBER:
37 case CURLUE_UNSUPPORTED_SCHEME:
39 case CURLUE_OUT_OF_MEMORY:
40 return {std::bad_alloc{}};
51 return curl_urlset_wrapper(
url, CURLUPART_URL, url_arg);
55 return curl_urlset_wrapper(
url, CURLUPART_SCHEME, scheme);
59 return curl_urlset_wrapper(
url, CURLUPART_OPTIONS, options);
63 return curl_urlset_wrapper(
url, CURLUPART_QUERY, query);
66 static auto curl_urlget_wrapper(
void *url, CURLUPart part)
noexcept ->
70 auto code = curl_url_get(
static_cast<CURLU*>(url), part, &result, 0);
72 assert(code != CURLUE_BAD_HANDLE);
73 assert(code != CURLUE_BAD_PARTPOINTER);
79 case CURLUE_OUT_OF_MEMORY:
80 return {std::bad_alloc{}};
82 case CURLUE_NO_SCHEME:
86 case CURLUE_NO_PASSWORD:
88 case CURLUE_NO_OPTIONS:
96 case CURLUE_NO_FRAGMENT:
106 return curl_urlget_wrapper(
url, CURLUPART_URL);
108 auto Url_ref_t::get_scheme()
const noexcept -> Ret_except<string,
get_code, std::bad_alloc>
110 return curl_urlget_wrapper(
url, CURLUPART_SCHEME);
112 auto Url_ref_t::get_options()
const noexcept -> Ret_except<string,
get_code, std::bad_alloc>
114 return curl_urlget_wrapper(
url, CURLUPART_OPTIONS);
116 auto Url_ref_t::get_query()
const noexcept -> Ret_except<string,
get_code, std::bad_alloc>
118 return curl_urlget_wrapper(
url, CURLUPART_QUERY);