|
Ada 3.3.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 |
Public Member Functions inherited from ada::url_base | |
| 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 *) |
Additional Inherited Members | |
Public Attributes inherited from ada::url_base | |
| 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. These views are only valid as long as the url_aggregator is not modified or deleted.
Definition at line 30 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. Note that the returned view becomes invalid if the url_aggregator is modified or deleted.
Definition at line 721 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. Note that the returned view becomes invalid if the url_aggregator is modified or deleted. When there is no host, this function returns the empty view.
Definition at line 735 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. Note that the returned view becomes invalid if the url_aggregator is modified or deleted. When there is no host, this function returns the empty view.
Definition at line 754 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. Note that the returned view becomes invalid if the url_aggregator is modified or deleted.
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 664 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. Note that the returned view becomes invalid if the url_aggregator is modified or deleted.
Definition at line 701 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. Note that the returned view becomes invalid if the url_aggregator is modified or deleted.
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. Note that the returned view becomes invalid if the url_aggregator is modified or deleted.
Definition at line 711 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. Note that the returned view becomes invalid if the url_aggregator is modified or deleted.
Definition at line 787 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. Note that the returned view becomes invalid if the url_aggregator is modified or deleted.
Definition at line 769 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. Note that the returned view becomes invalid if the url_aggregator is modified or deleted.
Definition at line 691 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 886 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 400 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 650 of file url_aggregator.cpp.
References ADA_ASSERT_TRUE, and validate().
| bool ada::url_aggregator::set_hostname | ( | std::string_view | input | ) |
Definition at line 657 of file url_aggregator.cpp.
References ADA_ASSERT_TRUE, and validate().
| bool ada::url_aggregator::set_href | ( | std::string_view | input | ) |
The setter functions follow the steps defined in the URL Standard.
The url_aggregator has a single buffer that contains the entire normalized URL. The various components are represented as offsets into that buffer. When you call get_pathname(), for example, you get a std::string_view that points into that buffer. If the url_aggregator is modified, the buffer may be reallocated, and the std::string_view you obtained earlier may become invalid. In particular, this implies that you cannot modify the URL using a setter function with a std::string_view that points into the url_aggregator E.g., the following is incorrect: url->set_hostname(url->get_pathname()). You must first copy the pathname to a separate string. std::string pathname(url->get_pathname()); url->set_hostname(pathname);
The caller is responsible for ensuring that the url_aggregator is not modified while any std::string_view obtained from it is in use.
Definition at line 420 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 257 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 320 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 277 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 210 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 378 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 237 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 1250 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 793 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 |
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 parser::parse_url_impl, and url_aggregator().