Ada 2.9.0
Fast spec-compliant URL parser
Loading...
Searching...
No Matches
url_aggregator.h
Go to the documentation of this file.
1
5#ifndef ADA_URL_AGGREGATOR_H
6#define ADA_URL_AGGREGATOR_H
7
8#include <string>
9#include <string_view>
10
11#include "ada/common_defs.h"
12#include "ada/url_base.h"
13#include "ada/url_components.h"
14
15namespace ada {
16
26 url_aggregator() = default;
27 url_aggregator(const url_aggregator &u) = default;
28 url_aggregator(url_aggregator &&u) noexcept = default;
29 url_aggregator &operator=(url_aggregator &&u) noexcept = default;
31 ~url_aggregator() override = default;
32
33 bool set_href(std::string_view input);
34 bool set_host(std::string_view input);
35 bool set_hostname(std::string_view input);
36 bool set_protocol(std::string_view input);
37 bool set_username(std::string_view input);
38 bool set_password(std::string_view input);
39 bool set_port(std::string_view input);
40 bool set_pathname(std::string_view input);
41 void set_search(std::string_view input);
42 void set_hash(std::string_view input);
43
44 [[nodiscard]] bool has_valid_domain() const noexcept override;
51 [[nodiscard]] std::string get_origin() const noexcept override;
60 [[nodiscard]] inline std::string_view get_href() const noexcept
68 [[nodiscard]] std::string_view get_username() const noexcept
76 [[nodiscard]] std::string_view get_password() const noexcept
84 [[nodiscard]] std::string_view get_port() const noexcept ada_lifetime_bound;
91 [[nodiscard]] std::string_view get_hash() const noexcept ada_lifetime_bound;
100 [[nodiscard]] std::string_view get_host() const noexcept ada_lifetime_bound;
108 [[nodiscard]] std::string_view get_hostname() const noexcept
117 [[nodiscard]] std::string_view get_pathname() const noexcept
125 [[nodiscard]] ada_really_inline uint32_t get_pathname_length() const noexcept;
132 [[nodiscard]] std::string_view get_search() const noexcept ada_lifetime_bound;
140 [[nodiscard]] std::string_view get_protocol() const noexcept
142
147 [[nodiscard]] ada_really_inline bool has_credentials() const noexcept;
148
170 [[nodiscard]] ada_really_inline const ada::url_components &get_components()
171 const noexcept;
175 [[nodiscard]] std::string to_string() const override;
179 [[nodiscard]] std::string to_diagram() const;
180
186 [[nodiscard]] bool validate() const noexcept;
187
189 [[nodiscard]] inline bool has_empty_hostname() const noexcept;
191 [[nodiscard]] inline bool has_hostname() const noexcept;
193 [[nodiscard]] inline bool has_non_empty_username() const noexcept;
195 [[nodiscard]] inline bool has_non_empty_password() const noexcept;
197 [[nodiscard]] inline bool has_port() const noexcept;
199 [[nodiscard]] inline bool has_password() const noexcept;
201 [[nodiscard]] inline bool has_hash() const noexcept override;
203 [[nodiscard]] inline bool has_search() const noexcept override;
204
205 inline void clear_port();
206 inline void clear_hash();
207 inline void clear_search() override;
208
209 private:
211 std::string_view, const ada::url_aggregator *);
215 ada::url_aggregator, true>(std::string_view, const ada::url_aggregator *);
217 ada::parser::parse_url_impl<ada::url_aggregator, false>(
218 std::string_view, const ada::url_aggregator *);
219
220 std::string buffer{};
221 url_components components{};
222
228 [[nodiscard]] ada_really_inline bool is_at_path() const noexcept;
229
230 inline void add_authority_slashes_if_needed() noexcept;
231
236 inline void reserve(uint32_t capacity);
237
238 ada_really_inline size_t parse_port(
239 std::string_view view, bool check_trailing_content) noexcept override;
240
241 ada_really_inline size_t parse_port(std::string_view view) noexcept override {
242 return this->parse_port(view, false);
243 }
244
251 [[nodiscard]] bool parse_ipv4(std::string_view input, bool in_place);
252
257 [[nodiscard]] bool parse_ipv6(std::string_view input);
258
263 [[nodiscard]] bool parse_opaque_host(std::string_view input);
264
265 ada_really_inline void parse_path(std::string_view input);
266
271 [[nodiscard]] inline bool cannot_have_credentials_or_port() const;
272
273 template <bool override_hostname = false>
274 bool set_host_or_hostname(std::string_view input);
275
276 ada_really_inline bool parse_host(std::string_view input);
277
278 inline void update_base_authority(std::string_view base_buffer,
279 const ada::url_components &base);
280 inline void update_unencoded_base_hash(std::string_view input);
281 inline void update_base_hostname(std::string_view input);
282 inline void update_base_search(std::string_view input);
283 inline void update_base_search(std::string_view input,
284 const uint8_t *query_percent_encode_set);
285 inline void update_base_pathname(std::string_view input);
286 inline void update_base_username(std::string_view input);
287 inline void append_base_username(std::string_view input);
288 inline void update_base_password(std::string_view input);
289 inline void append_base_password(std::string_view input);
290 inline void update_base_port(uint32_t input);
291 inline void append_base_pathname(std::string_view input);
292 [[nodiscard]] inline uint32_t retrieve_base_port() const;
293 inline void clear_hostname();
294 inline void clear_password();
295 inline void clear_pathname() override;
296 [[nodiscard]] inline bool has_dash_dot() const noexcept;
297 void delete_dash_dot();
298 inline void consume_prepared_path(std::string_view input);
299 template <bool has_state_override = false>
300 [[nodiscard]] ada_really_inline bool parse_scheme_with_colon(
301 std::string_view input);
302 ada_really_inline uint32_t replace_and_resize(uint32_t start, uint32_t end,
303 std::string_view input);
304 [[nodiscard]] inline bool has_authority() const noexcept;
305 inline void set_protocol_as_file();
306 inline void set_scheme(std::string_view new_scheme) noexcept;
311 inline void set_scheme_from_view_with_colon(
312 std::string_view new_scheme_with_colon) noexcept;
313 inline void copy_scheme(const url_aggregator &u) noexcept;
314
315}; // url_aggregator
316
317inline std::ostream &operator<<(std::ostream &out, const ada::url &u);
318} // namespace ada
319
320#endif
Common definitions for cross-platform compiler support.
#define ada_lifetime_bound
#define ada_really_inline
Definition common_defs.h:84
Definition ada_idna.h:13
Lightweight URL struct.
url_aggregator & operator=(const url_aggregator &u)=default
url_aggregator & operator=(url_aggregator &&u) noexcept=default
bool has_non_empty_username() const noexcept
ada_really_inline const ada::url_components & get_components() const noexcept
void set_hash(std::string_view input)
void clear_search() override
url_aggregator()=default
bool has_hostname() const noexcept
std::string_view get_hostname() const noexcept ada_lifetime_bound
bool has_non_empty_password() const noexcept
friend void ada::helpers::strip_trailing_spaces_from_opaque_path(ada::url_aggregator &url) noexcept
ada_really_inline bool has_credentials() const noexcept
friend ada::url_aggregator ada::parser::parse_url(std::string_view, const ada::url_aggregator *)
std::string to_string() const override
std::string_view get_pathname() const noexcept ada_lifetime_bound
std::string_view get_hash() const noexcept ada_lifetime_bound
bool has_empty_hostname() const noexcept
bool has_search() const noexcept override
std::string to_diagram() const
bool set_protocol(std::string_view input)
std::string get_origin() const noexcept override
bool validate() const noexcept
bool has_password() const noexcept
std::string_view get_search() const noexcept ada_lifetime_bound
ada_really_inline uint32_t get_pathname_length() const noexcept
bool has_valid_domain() const noexcept override
bool set_hostname(std::string_view input)
bool set_password(std::string_view input)
~url_aggregator() override=default
bool set_pathname(std::string_view input)
bool has_hash() const noexcept override
std::string_view get_protocol() const noexcept ada_lifetime_bound
std::string_view get_password() const noexcept ada_lifetime_bound
bool set_href(std::string_view input)
void set_search(std::string_view input)
std::string_view get_port() const noexcept ada_lifetime_bound
bool has_port() const noexcept
url_aggregator(url_aggregator &&u) noexcept=default
std::string_view get_href() const noexcept ada_lifetime_bound
friend ada::url_aggregator ada::parser::parse_url_impl(std::string_view, const ada::url_aggregator *)
bool set_host(std::string_view input)
std::string_view get_host() const noexcept ada_lifetime_bound
bool set_port(std::string_view input)
url_aggregator(const url_aggregator &u)=default
std::string_view get_username() const noexcept ada_lifetime_bound
bool set_username(std::string_view input)
Base class of URL implementations.
Definition url_base.h:44
URL Component representations using offsets.
Generic URL struct reliant on std::string instantiation.
Definition url.h:38
Declaration for the basic URL definitions.
Declaration for the URL Components.