19 std::variant<std::string_view, url_pattern_init> input,
25 if (std::holds_alternative<std::string_view>(input)) {
29 std::get<std::string_view>(input));
31 ada_log(
"constructor_string_parser::parse failed");
32 return tl::unexpected(parse_result.error());
34 init = std::move(*parse_result);
38 ada_log(
"base url is null and protocol is not set");
44 init.
base_url = std::string(*base_url);
51 ada_log(
"base url is not null");
56 init = std::move(std::get<url_pattern_init>(input));
63 if (!processed_init) {
64 ada_log(
"url_pattern_init::process failed for init and 'pattern'");
65 return tl::unexpected(processed_init.error());
72 if (!processed_init->protocol) processed_init->protocol =
"*";
73 if (!processed_init->username) processed_init->username =
"*";
74 if (!processed_init->password) processed_init->password =
"*";
75 if (!processed_init->hostname) processed_init->hostname =
"*";
76 if (!processed_init->port) processed_init->port =
"*";
77 if (!processed_init->pathname) processed_init->pathname =
"*";
78 if (!processed_init->search) processed_init->search =
"*";
79 if (!processed_init->hash) processed_init->hash =
"*";
81 ada_log(
"-- processed_init->protocol: ", processed_init->protocol.value());
82 ada_log(
"-- processed_init->username: ", processed_init->username.value());
83 ada_log(
"-- processed_init->password: ", processed_init->password.value());
84 ada_log(
"-- processed_init->hostname: ", processed_init->hostname.value());
85 ada_log(
"-- processed_init->port: ", processed_init->port.value());
86 ada_log(
"-- processed_init->pathname: ", processed_init->pathname.value());
87 ada_log(
"-- processed_init->search: ", processed_init->search.value());
88 ada_log(
"-- processed_init->hash: ", processed_init->hash.value());
94 if (scheme::is_special(*processed_init->protocol)) {
95 std::string_view port = processed_init->port.value();
96 helpers::trim_c0_whitespace(port);
99 processed_init->port->clear();
110 processed_init->protocol.value(),
113 if (!protocol_component) {
114 ada_log(
"url_pattern_component::compile failed for protocol ",
115 processed_init->protocol.value());
116 return tl::unexpected(protocol_component.error());
118 url_pattern_.protocol_component = std::move(*protocol_component);
124 processed_init->username.value(),
127 if (!username_component) {
128 ada_log(
"url_pattern_component::compile failed for username ",
129 processed_init->username.value());
130 return tl::unexpected(username_component.error());
132 url_pattern_.username_component = std::move(*username_component);
138 processed_init->password.value(),
141 if (!password_component) {
142 ada_log(
"url_pattern_component::compile failed for password ",
143 processed_init->password.value());
144 return tl::unexpected(password_component.error());
146 url_pattern_.password_component = std::move(*password_component);
155 ada_log(
"processed_init->hostname is ipv6 address");
160 processed_init->hostname.value(),
163 if (!hostname_component) {
164 ada_log(
"url_pattern_component::compile failed for ipv6 hostname ",
165 processed_init->hostname.value());
166 return tl::unexpected(hostname_component.error());
168 url_pattern_.hostname_component = std::move(*hostname_component);
174 processed_init->hostname.value(),
177 if (!hostname_component) {
178 ada_log(
"url_pattern_component::compile failed for hostname ",
179 processed_init->hostname.value());
180 return tl::unexpected(hostname_component.error());
182 url_pattern_.hostname_component = std::move(*hostname_component);
190 if (!port_component) {
191 ada_log(
"url_pattern_component::compile failed for port ",
192 processed_init->port.value());
193 return tl::unexpected(port_component.error());
195 url_pattern_.port_component = std::move(*port_component);
201 compile_options.ignore_case = options->
ignore_case;
213 path_compile_options.ignore_case = options->
ignore_case;
220 processed_init->pathname.value(),
222 if (!pathname_component) {
223 ada_log(
"url_pattern_component::compile failed for pathname ",
224 processed_init->pathname.value());
225 return tl::unexpected(pathname_component.error());
227 url_pattern_.pathname_component = std::move(*pathname_component);
233 processed_init->pathname.value(),
235 if (!pathname_component) {
236 ada_log(
"url_pattern_component::compile failed for opaque pathname ",
237 processed_init->pathname.value());
238 return tl::unexpected(pathname_component.error());
240 url_pattern_.pathname_component = std::move(*pathname_component);
248 if (!search_component) {
249 ada_log(
"url_pattern_component::compile failed for search ",
250 processed_init->search.value());
251 return tl::unexpected(search_component.error());
253 url_pattern_.search_component = std::move(*search_component);
260 if (!hash_component) {
261 ada_log(
"url_pattern_component::compile failed for hash ",
262 processed_init->hash.value());
263 return tl::unexpected(hash_component.error());
265 url_pattern_.hash_component = std::move(*hash_component);