Ada 3.1.0
Fast spec-compliant URL parser
|
Lightweight URL struct. More...
#include <url_aggregator.h>
Public Member Functions | |
url_aggregator ()=default | |
url_aggregator (const url_aggregator &u)=default | |
url_aggregator (url_aggregator &&u) noexcept=default | |
url_aggregator & | operator= (url_aggregator &&u) noexcept=default |
url_aggregator & | operator= (const url_aggregator &u)=default |
~url_aggregator () override=default | |
bool | set_href (std::string_view input) |
bool | set_host (std::string_view input) |
bool | set_hostname (std::string_view input) |
bool | set_protocol (std::string_view input) |
bool | set_username (std::string_view input) |
bool | set_password (std::string_view input) |
bool | set_port (std::string_view input) |
bool | set_pathname (std::string_view input) |
void | set_search (std::string_view input) |
void | set_hash (std::string_view input) |
bool | has_valid_domain () const noexcept override |
std::string | get_origin () const noexcept override |
constexpr std::string_view | get_href () const noexcept ada_lifetime_bound |
std::string_view | get_username () const noexcept ada_lifetime_bound |
std::string_view | get_password () const noexcept ada_lifetime_bound |
std::string_view | get_port () const noexcept ada_lifetime_bound |
std::string_view | get_hash () const noexcept ada_lifetime_bound |
std::string_view | get_host () const noexcept ada_lifetime_bound |
std::string_view | get_hostname () const noexcept ada_lifetime_bound |
constexpr std::string_view | get_pathname () const noexcept ada_lifetime_bound |
ada_really_inline uint32_t | get_pathname_length () const noexcept |
std::string_view | get_search () const noexcept ada_lifetime_bound |
std::string_view | get_protocol () const noexcept ada_lifetime_bound |
ada_really_inline constexpr bool | has_credentials () const noexcept |
ada_really_inline const url_components & | get_components () const noexcept |
std::string | to_string () const override |
std::string | to_diagram () const |
constexpr bool | validate () const noexcept |
constexpr bool | has_empty_hostname () const noexcept |
constexpr bool | has_hostname () const noexcept |
constexpr bool | has_non_empty_username () const noexcept |
constexpr bool | has_non_empty_password () const noexcept |
constexpr bool | has_port () const noexcept |
constexpr bool | has_password () const noexcept |
constexpr bool | has_hash () const noexcept override |
constexpr bool | has_search () const noexcept override |
void | clear_port () |
void | clear_hash () |
void | clear_search () override |
![]() | |
virtual | ~url_base ()=default |
ada_really_inline constexpr bool | is_special () const noexcept |
Friends | |
void | helpers::strip_trailing_spaces_from_opaque_path (url_aggregator &url) noexcept |
url_aggregator | parser::parse_url (std::string_view, const url_aggregator *) |
url_aggregator | parser::parse_url_impl (std::string_view, const url_aggregator *) |
url_aggregator | parser::parse_url_impl (std::string_view, const url_aggregator *) |
template<url_pattern_regex::regex_concept regex_provider> | |
tl::expected< url_pattern< regex_provider >, errors > | parse_url_pattern_impl (std::variant< std::string_view, url_pattern_init > input, const std::string_view *base_url, const url_pattern_options *options) |
Additional Inherited Members | |
![]() | |
bool | is_valid {true} |
bool | has_opaque_path {false} |
url_host_type | host_type = url_host_type::DEFAULT |
Lightweight URL struct.
The url_aggregator class aims to minimize temporary memory allocation while representing a parsed URL. Internally, it contains a single normalized URL (the href), and it makes available the components, mostly using std::string_view.
Definition at line 29 of file url_aggregator.h.
|
default |
|
default |
References url_aggregator().
|
defaultnoexcept |
References url_aggregator().
|
overridedefault |
References ada_lifetime_bound, ada_really_inline, clear_hash(), clear_port(), clear_search(), get_components(), get_hash(), get_host(), get_hostname(), get_href(), get_origin(), get_password(), get_pathname(), get_pathname_length(), get_port(), get_protocol(), get_search(), get_username(), has_credentials(), has_empty_hostname(), has_hash(), has_hostname(), has_non_empty_password(), has_non_empty_username(), has_password(), has_port(), has_search(), to_diagram(), to_string(), and validate().
|
inline |
Definition at line 615 of file url_aggregator-inl.h.
References ADA_ASSERT_EQUAL, ADA_ASSERT_TRUE, get_hash(), ada::url_components::omitted, to_diagram(), and validate().
Referenced by ~url_aggregator().
|
inline |
Definition at line 566 of file url_aggregator-inl.h.
References ADA_ASSERT_TRUE, ada::url_components::omitted, and validate().
Referenced by set_port(), and ~url_aggregator().
|
inlineoverridevirtual |
Implements ada::url_base.
Definition at line 590 of file url_aggregator-inl.h.
References ADA_ASSERT_EQUAL, ADA_ASSERT_TRUE, get_search(), ada::url_components::omitted, to_diagram(), and validate().
Referenced by set_search(), and ~url_aggregator().
|
nodiscardnoexcept |
Useful for implementing efficient serialization for the URL.
https://user:pass@example.com:1234/foo/bar?baz#quux | | | | ^^^^| | | | | | | | | | ----- hash_start | | | | | |
------— search_start | | | | | ----------------- pathname_start | | | |
------------------— port | | | ----------------------- host_end | |
-------------------------------— host_start | --------------------------------------- username_end
------------------------------------------— protocol_end
Inspired after servo/url
Definition at line 726 of file url_aggregator-inl.h.
Referenced by ~url_aggregator().
|
nodiscardnoexcept |
Return U+0023 (#), followed by this's URL's fragment. This function does not allocate memory.
Definition at line 675 of file url_aggregator.cpp.
References ada_lifetime_bound, and ada::url_components::omitted.
Referenced by clear_hash(), to_string(), and ~url_aggregator().
|
nodiscardnoexcept |
Return url's host, serialized, followed by U+003A (:) and url's port, serialized. This function does not allocate memory. When there is no host, this function returns the empty view.
Definition at line 689 of file url_aggregator.cpp.
References ada_lifetime_bound.
Referenced by get_origin(), to_string(), and ~url_aggregator().
|
nodiscardnoexcept |
Return this's URL's host, serialized. This function does not allocate memory. When there is no host, this function returns the empty view.
Definition at line 708 of file url_aggregator.cpp.
References ada_lifetime_bound.
Referenced by has_valid_domain(), and ~url_aggregator().
|
nodiscardconstexprnoexcept |
Return the normalized string. This function does not allocate memory. It is highly efficient.
Definition at line 843 of file url_aggregator-inl.h.
References ada_lifetime_bound.
Referenced by ~url_aggregator().
|
nodiscardoverridevirtualnoexcept |
The origin getter steps are to return the serialization of this's URL's origin. [HTML]
Implements ada::url_base.
Definition at line 618 of file url_aggregator.cpp.
References ada::scheme::FILE, get_host(), get_pathname(), get_protocol(), ada::scheme::HTTP, ada::scheme::HTTPS, ada::url_base::is_special(), and ada::parse().
Referenced by ~url_aggregator().
|
nodiscardnoexcept |
The password getter steps are to return this's URL's password. This function does not allocate memory.
Definition at line 655 of file url_aggregator.cpp.
References ada_lifetime_bound, and has_non_empty_password().
Referenced by to_string(), and ~url_aggregator().
|
nodiscardconstexprnoexcept |
The pathname getter steps are to return the result of URL path serializing this's URL. This function does not allocate memory.
Definition at line 1088 of file url_aggregator-inl.h.
References ada_lifetime_bound, and ada::url_components::omitted.
Referenced by get_origin(), set_pathname(), to_string(), and ~url_aggregator().
|
nodiscardnoexcept |
Compute the pathname length in bytes without instantiating a view or a string.
Definition at line 154 of file url_aggregator-inl.h.
References ada::url_components::omitted.
Referenced by ~url_aggregator().
|
nodiscardnoexcept |
Return this's URL's port, serialized. This function does not allocate memory.
Definition at line 665 of file url_aggregator.cpp.
References ada_lifetime_bound, and ada::url_components::omitted.
Referenced by ~url_aggregator().
|
nodiscardnoexcept |
The protocol getter steps are to return this's URL's scheme, followed by U+003A (:). This function does not allocate memory.
Definition at line 741 of file url_aggregator.cpp.
References ada_lifetime_bound.
Referenced by get_origin(), to_string(), and ~url_aggregator().
|
nodiscardnoexcept |
Return U+003F (?), followed by this's URL's query. This function does not allocate memory.
Definition at line 723 of file url_aggregator.cpp.
References ada_lifetime_bound, and ada::url_components::omitted.
Referenced by clear_search(), to_string(), and ~url_aggregator().
|
nodiscardnoexcept |
The username getter steps are to return this's URL's username. This function does not allocate memory.
Definition at line 645 of file url_aggregator.cpp.
References ada_lifetime_bound, and has_non_empty_username().
Referenced by to_string(), and ~url_aggregator().
|
nodiscardconstexprnoexcept |
A URL includes credentials if its username or password is not the empty string.
Definition at line 714 of file url_aggregator-inl.h.
References has_non_empty_password(), and has_non_empty_username().
Referenced by to_string(), and ~url_aggregator().
|
nodiscardconstexprnoexcept |
Definition at line 787 of file url_aggregator-inl.h.
References has_hostname().
Referenced by ~url_aggregator().
|
nodiscardconstexproverridevirtualnoexcept |
Implements ada::url_base.
Definition at line 704 of file url_aggregator-inl.h.
References ada::url_components::omitted.
Referenced by ~url_aggregator().
|
nodiscardconstexprnoexcept |
Definition at line 800 of file url_aggregator-inl.h.
Referenced by has_empty_hostname(), has_port(), and ~url_aggregator().
|
nodiscardconstexprnoexcept |
Definition at line 775 of file url_aggregator-inl.h.
Referenced by get_password(), has_credentials(), and ~url_aggregator().
|
nodiscardconstexprnoexcept |
Definition at line 770 of file url_aggregator-inl.h.
Referenced by get_username(), has_credentials(), and ~url_aggregator().
|
nodiscardconstexprnoexcept |
Definition at line 780 of file url_aggregator-inl.h.
Referenced by ~url_aggregator().
|
nodiscardconstexprnoexcept |
Definition at line 804 of file url_aggregator-inl.h.
References has_hostname().
Referenced by ~url_aggregator().
|
nodiscardconstexproverridevirtualnoexcept |
Implements ada::url_base.
Definition at line 709 of file url_aggregator-inl.h.
References ada::url_components::omitted.
Referenced by ~url_aggregator().
|
nodiscardoverridevirtualnoexcept |
Returns true if this URL has a valid domain as per RFC 1034 and corresponding specifications. Among other things, it requires that the domain string has fewer than 255 octets.
Implements ada::url_base.
Definition at line 840 of file url_aggregator.cpp.
References get_hostname().
|
default |
References url_aggregator().
|
defaultnoexcept |
References url_aggregator().
void ada::url_aggregator::set_hash | ( | std::string_view | input | ) |
Definition at line 386 of file url_aggregator.cpp.
References ADA_ASSERT_TRUE, ada::url_components::omitted, and validate().
bool ada::url_aggregator::set_host | ( | std::string_view | input | ) |
Definition at line 604 of file url_aggregator.cpp.
References ADA_ASSERT_TRUE, and validate().
bool ada::url_aggregator::set_hostname | ( | std::string_view | input | ) |
Definition at line 611 of file url_aggregator.cpp.
References ADA_ASSERT_TRUE, and validate().
bool ada::url_aggregator::set_href | ( | std::string_view | input | ) |
Definition at line 406 of file url_aggregator.cpp.
References ADA_ASSERT_TRUE, and ada::parse< url_aggregator >().
bool ada::url_aggregator::set_password | ( | std::string_view | input | ) |
Definition at line 255 of file url_aggregator.cpp.
References ADA_ASSERT_TRUE, ada::unicode::percent_encode_index(), ada::character_sets::USERINFO_PERCENT_ENCODE, and validate().
bool ada::url_aggregator::set_pathname | ( | std::string_view | input | ) |
Definition at line 306 of file url_aggregator.cpp.
References ADA_ASSERT_TRUE, get_pathname(), ada::url_base::has_opaque_path, and validate().
bool ada::url_aggregator::set_port | ( | std::string_view | input | ) |
Definition at line 275 of file url_aggregator.cpp.
References ADA_ASSERT_TRUE, clear_port(), ada::url_base::is_valid, and validate().
bool ada::url_aggregator::set_protocol | ( | std::string_view | input | ) |
Definition at line 208 of file url_aggregator.cpp.
References ADA_ASSERT_TRUE, ada::checkers::is_alpha(), and validate().
void ada::url_aggregator::set_search | ( | std::string_view | input | ) |
Definition at line 364 of file url_aggregator.cpp.
References ADA_ASSERT_TRUE, clear_search(), ada::url_base::is_special(), ada::character_sets::QUERY_PERCENT_ENCODE, ada::character_sets::SPECIAL_QUERY_PERCENT_ENCODE, and validate().
bool ada::url_aggregator::set_username | ( | std::string_view | input | ) |
Definition at line 235 of file url_aggregator.cpp.
References ADA_ASSERT_TRUE, ada::unicode::percent_encode_index(), ada::character_sets::USERINFO_PERCENT_ENCODE, and validate().
|
nodiscard |
Returns a string diagram of this URL.
Definition at line 1205 of file url_aggregator.cpp.
References ada::url_base::is_valid, and ada::url_components::omitted.
Referenced by clear_hash(), clear_search(), validate(), and ~url_aggregator().
|
nodiscardoverridevirtual |
Returns a string representation of this URL.
Implements ada::url_base.
Definition at line 747 of file url_aggregator.cpp.
References get_hash(), get_host(), get_password(), get_pathname(), get_protocol(), get_search(), get_username(), has_credentials(), ada::url_base::has_opaque_path, ada::url_base::is_valid, and ada::url_components::omitted.
Referenced by ada::operator<<(), and ~url_aggregator().
|
nodiscardconstexprnoexcept |
Verifies that the parsed URL could be valid. Useful for debugging purposes.
https://user:pass@example.com:1234/foo/bar?baz#quux | | | | ^^^^| | | | | | | | | | ----- hash_start | | | | | |
------— search_start | | | | | ----------------- pathname_start | | | |
------------------— port | | | ----------------------- host_end | |
-------------------------------— host_start | --------------------------------------- username_end
------------------------------------------— protocol_end
Definition at line 918 of file url_aggregator-inl.h.
References ada::url_base::has_opaque_path, ada::url_base::is_valid, ada::url_components::omitted, and to_diagram().
Referenced by clear_hash(), clear_port(), clear_search(), set_hash(), set_host(), set_hostname(), set_password(), set_pathname(), set_port(), set_protocol(), set_search(), set_username(), and ~url_aggregator().
|
friend |
References helpers::strip_trailing_spaces_from_opaque_path, and url_aggregator().
Referenced by helpers::strip_trailing_spaces_from_opaque_path.
|
friend |
Definition at line 18 of file parser-inl.h.
References ADA_ASSERT_TRUE, ada::url_pattern_init::base_url, ada::url_pattern_helpers::canonicalize_hash(), ada::url_pattern_helpers::canonicalize_hostname(), ada::url_pattern_helpers::canonicalize_ipv6_hostname(), ada::url_pattern_helpers::canonicalize_opaque_pathname(), ada::url_pattern_helpers::canonicalize_password(), ada::url_pattern_helpers::canonicalize_pathname(), ada::url_pattern_helpers::canonicalize_port(), ada::url_pattern_helpers::canonicalize_protocol(), ada::url_pattern_helpers::canonicalize_search(), ada::url_pattern_helpers::canonicalize_username(), ada::url_pattern_component< regex_provider >::compile(), ada::url_pattern_compile_component_options::DEFAULT, ada::scheme::get_special_port(), ada::url_pattern_compile_component_options::HOSTNAME, ada::url_pattern_options::ignore_case, ada::url_pattern_helpers::is_ipv6_address(), ada::url_pattern_helpers::constructor_string_parser< regex_provider >::parse(), ada::url_pattern_compile_component_options::PATHNAME, ada::url_pattern_init::pattern, ada::url_pattern_init::process(), ada::url_pattern_init::protocol, ada::url_pattern_helpers::protocol_component_matches_special_scheme(), and ada::type_error.
Referenced by parser::parse_url_impl.
|
friend |
References parser::parse_url, and url_aggregator().
Referenced by parser::parse_url.
|
friend |
References parser::parse_url_impl, and url_aggregator().
Referenced by parser::parse_url_impl.
|
friend |
References parse_url_pattern_impl, parser::parse_url_impl, and url_aggregator().