Ada 3.4.0
Fast spec-compliant URL parser
Loading...
Searching...
No Matches
url.h
Go to the documentation of this file.
1
11#ifndef ADA_URL_H
12#define ADA_URL_H
13
14#include <algorithm>
15#include <optional>
16#include <ostream>
17#include <string>
18#include <string_view>
19
20#include "ada/checkers.h"
21#include "ada/common_defs.h"
22#include "ada/url_base.h"
23#include "ada/url_components.h"
24#include "ada/helpers.h"
25
26namespace ada {
27
28struct url_aggregator;
29
30// namespace parser {
31// template <typename result_type>
32// result_type parse_url(std::string_view user_input,
33// const result_type* base_url = nullptr);
34// template <typename result_type, bool store_values>
35// result_type parse_url_impl(std::string_view user_input,
36// const result_type* base_url = nullptr);
37// }
38
62struct url : url_base {
63 url() = default;
64 url(const url &u) = default;
65 url(url &&u) noexcept = default;
66 url &operator=(url &&u) noexcept = default;
67 url &operator=(const url &u) = default;
68 ~url() override = default;
69
75 std::string username{};
76
82 std::string password{};
83
88 std::optional<std::string> host{};
89
95 std::optional<uint16_t> port{};
96
102 std::string path{};
103
108 std::optional<std::string> query{};
109
116 std::optional<std::string> hash{};
117
122 [[nodiscard]] inline bool has_empty_hostname() const noexcept;
123
128 [[nodiscard]] inline bool has_port() const noexcept;
129
134 [[nodiscard]] inline bool has_hostname() const noexcept;
135
142 [[nodiscard]] bool has_valid_domain() const noexcept override;
143
148 [[nodiscard]] std::string to_string() const override;
149
155 [[nodiscard]] ada_really_inline std::string get_href() const noexcept;
156
163 [[nodiscard]] std::string get_origin() const noexcept override;
164
170 [[nodiscard]] std::string get_protocol() const noexcept;
171
178 [[nodiscard]] std::string get_host() const noexcept;
179
186 [[nodiscard]] std::string get_hostname() const noexcept;
187
193 [[nodiscard]] constexpr std::string_view get_pathname() const noexcept;
194
200 [[nodiscard]] ada_really_inline size_t get_pathname_length() const noexcept;
201
208 [[nodiscard]] std::string get_search() const noexcept;
209
215 [[nodiscard]] const std::string &get_username() const noexcept;
216
223 bool set_username(std::string_view input);
224
231 bool set_password(std::string_view input);
232
239 bool set_port(std::string_view input);
240
246 void set_hash(std::string_view input);
247
253 void set_search(std::string_view input);
254
261 bool set_pathname(std::string_view input);
262
269 bool set_host(std::string_view input);
270
277 bool set_hostname(std::string_view input);
278
285 bool set_protocol(std::string_view input);
286
293 bool set_href(std::string_view input);
294
300 [[nodiscard]] const std::string &get_password() const noexcept;
301
308 [[nodiscard]] std::string get_port() const noexcept;
309
316 [[nodiscard]] std::string get_hash() const noexcept;
317
322 [[nodiscard]] ada_really_inline bool has_credentials() const noexcept;
323
343 [[nodiscard]] ada_really_inline ada::url_components get_components()
344 const noexcept;
345
350 [[nodiscard]] constexpr bool has_hash() const noexcept override;
351
356 [[nodiscard]] constexpr bool has_search() const noexcept override;
357
358 private:
359 friend ada::url ada::parser::parse_url<ada::url>(std::string_view,
360 const ada::url *);
362 std::string_view, const ada::url_aggregator *);
364 ada::url &url) noexcept;
365
366 friend ada::url ada::parser::parse_url_impl<ada::url, true>(std::string_view,
367 const ada::url *);
369 ada::url_aggregator, true>(std::string_view, const ada::url_aggregator *);
370
371 inline void update_unencoded_base_hash(std::string_view input);
372 inline void update_base_hostname(std::string_view input);
373 inline void update_base_search(std::string_view input,
374 const uint8_t query_percent_encode_set[]);
375 inline void update_base_search(std::optional<std::string> &&input);
376 inline void update_base_pathname(std::string_view input);
377 inline void update_base_username(std::string_view input);
378 inline void update_base_password(std::string_view input);
379 inline void update_base_port(std::optional<uint16_t> input);
380
386 template <bool override_hostname = false>
387 bool set_host_or_hostname(std::string_view input);
388
393 [[nodiscard]] bool parse_ipv4(std::string_view input);
394
399 [[nodiscard]] bool parse_ipv6(std::string_view input);
400
405 [[nodiscard]] bool parse_opaque_host(std::string_view input);
406
416 std::string non_special_scheme{};
417
422 [[nodiscard]] inline bool cannot_have_credentials_or_port() const;
423
424 ada_really_inline size_t parse_port(
425 std::string_view view, bool check_trailing_content) noexcept override;
426
427 ada_really_inline size_t parse_port(std::string_view view) noexcept override {
428 return this->parse_port(view, false);
429 }
430
439 [[nodiscard]] ada_really_inline bool parse_host(std::string_view input);
440
441 template <bool has_state_override = false>
442 [[nodiscard]] ada_really_inline bool parse_scheme(std::string_view input);
443
444 constexpr void clear_pathname() override;
445 constexpr void clear_search() override;
446 constexpr void set_protocol_as_file();
447
458 ada_really_inline void parse_path(std::string_view input);
459
465 inline void set_scheme(std::string &&new_scheme) noexcept;
466
471 constexpr void copy_scheme(ada::url &&u) noexcept;
472
477 constexpr void copy_scheme(const ada::url &u);
478
479}; // struct url
480
481inline std::ostream &operator<<(std::ostream &out, const ada::url &u);
482} // namespace ada
483
484#endif // ADA_URL_H
Declarations for URL specific checkers used within Ada.
Cross-platform compiler macros and common definitions.
#define ada_really_inline
Definition common_defs.h:85
Definitions for helper functions used within Ada.
Includes the definitions for helper functions.
Internal URL parsing implementation.
Definition parser-inl.h:16
Definition ada_idna.h:13
std::ostream & operator<<(std::ostream &out, const ada::url &u)
Definition url-inl.h:38
Memory-efficient URL representation using a single buffer.
Abstract base class for URL representations.
Definition url_base.h:49
Represents a parsed URL with individual string components.
Definition url.h:62
void set_hash(std::string_view input)
Definition url.cpp:864
std::string get_search() const noexcept
Definition url.cpp:659
bool set_hostname(std::string_view input)
Definition url.cpp:803
bool set_host(std::string_view input)
Definition url.cpp:799
ada_really_inline ada::url_components get_components() const noexcept
Definition url-inl.h:50
url(url &&u) noexcept=default
bool has_empty_hostname() const noexcept
Definition url-inl.h:29
bool has_port() const noexcept
Definition url-inl.h:22
ada_really_inline bool has_credentials() const noexcept
Definition url-inl.h:19
friend ada::url ada::parser::parse_url(std::string_view, const ada::url *)
bool set_password(std::string_view input)
Definition url.cpp:816
url & operator=(url &&u) noexcept=default
url & operator=(const url &u)=default
void set_search(std::string_view input)
Definition url.cpp:878
ada_really_inline size_t get_pathname_length() const noexcept
Definition url-inl.h:42
bool set_href(std::string_view input)
Definition url.cpp:929
ada_really_inline std::string get_href() const noexcept
Definition url-inl.h:188
bool has_hostname() const noexcept
Definition url-inl.h:35
bool set_username(std::string_view input)
Definition url.cpp:807
constexpr std::string_view get_pathname() const noexcept
Definition url-inl.h:46
url(const url &u)=default
~url() override=default
url()=default
std::string get_host() const noexcept
Definition url.cpp:641
std::string get_hash() const noexcept
Definition url.cpp:678
bool set_pathname(std::string_view input)
Definition url.cpp:896
std::string get_origin() const noexcept override
Definition url.cpp:607
friend void ada::helpers::strip_trailing_spaces_from_opaque_path(ada::url &url) noexcept
std::string get_hostname() const noexcept
Definition url.cpp:655
friend ada::url ada::parser::parse_url_impl(std::string_view, const ada::url *)
const std::string & get_password() const noexcept
Definition url.cpp:670
bool set_protocol(std::string_view input)
Definition url.cpp:905
std::string get_port() const noexcept
Definition url.cpp:674
const std::string & get_username() const noexcept
Definition url.cpp:666
bool set_port(std::string_view input)
Definition url.cpp:825
constexpr bool has_search() const noexcept override
Definition url-inl.h:164
std::string to_string() const override
Definition url.cpp:550
std::string get_protocol() const noexcept
Definition url.cpp:633
constexpr bool has_hash() const noexcept override
Definition url-inl.h:160
bool has_valid_domain() const noexcept override
Definition url.cpp:600
Base class and common definitions for URL types.
Declaration for the URL Components.