18 std::variant<std::string_view, url_pattern_init> input,
24 if (std::holds_alternative<std::string_view>(input)) {
28 std::get<std::string_view>(input));
30 ada_log(
"constructor_string_parser::parse failed");
31 return tl::unexpected(parse_result.error());
33 init = std::move(*parse_result);
37 ada_log(
"base url is null and protocol is not set");
43 init.
base_url = std::string(*base_url);
50 ada_log(
"base url is not null");
55 init = std::move(std::get<url_pattern_init>(input));
62 if (!processed_init) {
63 ada_log(
"url_pattern_init::process failed for init and 'pattern'");
64 return tl::unexpected(processed_init.error());
71 if (!processed_init->protocol) processed_init->protocol =
"*";
72 if (!processed_init->username) processed_init->username =
"*";
73 if (!processed_init->password) processed_init->password =
"*";
74 if (!processed_init->hostname) processed_init->hostname =
"*";
75 if (!processed_init->port) processed_init->port =
"*";
76 if (!processed_init->pathname) processed_init->pathname =
"*";
77 if (!processed_init->search) processed_init->search =
"*";
78 if (!processed_init->hash) processed_init->hash =
"*";
80 ada_log(
"-- processed_init->protocol: ", processed_init->protocol.value());
81 ada_log(
"-- processed_init->username: ", processed_init->username.value());
82 ada_log(
"-- processed_init->password: ", processed_init->password.value());
83 ada_log(
"-- processed_init->hostname: ", processed_init->hostname.value());
84 ada_log(
"-- processed_init->port: ", processed_init->port.value());
85 ada_log(
"-- processed_init->pathname: ", processed_init->pathname.value());
86 ada_log(
"-- processed_init->search: ", processed_init->search.value());
87 ada_log(
"-- processed_init->hash: ", processed_init->hash.value());
93 if (scheme::is_special(*processed_init->protocol)) {
94 std::string_view port = processed_init->port.value();
95 helpers::trim_c0_whitespace(port);
98 processed_init->port->clear();
109 processed_init->protocol.value(),
112 if (!protocol_component) {
113 ada_log(
"url_pattern_component::compile failed for protocol ",
114 processed_init->protocol.value());
115 return tl::unexpected(protocol_component.error());
117 url_pattern_.protocol_component = std::move(*protocol_component);
123 processed_init->username.value(),
126 if (!username_component) {
127 ada_log(
"url_pattern_component::compile failed for username ",
128 processed_init->username.value());
129 return tl::unexpected(username_component.error());
131 url_pattern_.username_component = std::move(*username_component);
137 processed_init->password.value(),
140 if (!password_component) {
141 ada_log(
"url_pattern_component::compile failed for password ",
142 processed_init->password.value());
143 return tl::unexpected(password_component.error());
145 url_pattern_.password_component = std::move(*password_component);
154 ada_log(
"processed_init->hostname is ipv6 address");
159 processed_init->hostname.value(),
162 if (!hostname_component) {
163 ada_log(
"url_pattern_component::compile failed for ipv6 hostname ",
164 processed_init->hostname.value());
165 return tl::unexpected(hostname_component.error());
167 url_pattern_.hostname_component = std::move(*hostname_component);
173 processed_init->hostname.value(),
176 if (!hostname_component) {
177 ada_log(
"url_pattern_component::compile failed for hostname ",
178 processed_init->hostname.value());
179 return tl::unexpected(hostname_component.error());
181 url_pattern_.hostname_component = std::move(*hostname_component);
189 if (!port_component) {
190 ada_log(
"url_pattern_component::compile failed for port ",
191 processed_init->port.value());
192 return tl::unexpected(port_component.error());
194 url_pattern_.port_component = std::move(*port_component);
200 compile_options.ignore_case = options->
ignore_case;
212 path_compile_options.ignore_case = options->
ignore_case;
219 processed_init->pathname.value(),
221 if (!pathname_component) {
222 ada_log(
"url_pattern_component::compile failed for pathname ",
223 processed_init->pathname.value());
224 return tl::unexpected(pathname_component.error());
226 url_pattern_.pathname_component = std::move(*pathname_component);
232 processed_init->pathname.value(),
234 if (!pathname_component) {
235 ada_log(
"url_pattern_component::compile failed for opaque pathname ",
236 processed_init->pathname.value());
237 return tl::unexpected(pathname_component.error());
239 url_pattern_.pathname_component = std::move(*pathname_component);
247 if (!search_component) {
248 ada_log(
"url_pattern_component::compile failed for search ",
249 processed_init->search.value());
250 return tl::unexpected(search_component.error());
252 url_pattern_.search_component = std::move(*search_component);
259 if (!hash_component) {
260 ada_log(
"url_pattern_component::compile failed for hash ",
261 processed_init->hash.value());
262 return tl::unexpected(hash_component.error());
264 url_pattern_.hash_component = std::move(*hash_component);