Ada 2.7.8
Fast spec-compliant URL parser
Loading...
Searching...
No Matches
url_components.cpp
Go to the documentation of this file.
1#include "ada.h"
2#include "ada/helpers.h"
4
5#include <numeric>
6#include <string>
7
8namespace ada {
9
23 // These conditions can be made more strict.
24 uint32_t index = 0;
25
27 return false;
28 }
29 if (protocol_end < index) {
30 return false;
31 }
32 index = protocol_end;
33
35 return false;
36 }
37 if (username_end < index) {
38 return false;
39 }
40 index = username_end;
41
43 return false;
44 }
45 if (host_start < index) {
46 return false;
47 }
48 index = host_start;
49
51 if (port > 0xffff) {
52 return false;
53 }
54 uint32_t port_length = helpers::fast_digit_count(port) + 1;
55 if (index + port_length < index) {
56 return false;
57 }
58 index += port_length;
59 }
60
62 return false;
63 }
64 if (pathname_start < index) {
65 return false;
66 }
67 index = pathname_start;
68
70 if (search_start < index) {
71 return false;
72 }
73 index = search_start;
74 }
75
77 if (hash_start < index) {
78 return false;
79 }
80 index = hash_start;
81 }
82
83 return true;
84}
85
86[[nodiscard]] std::string url_components::to_string() const {
87 std::string answer;
88 auto back = std::back_insert_iterator(answer);
89 answer.append("{\n");
90
91 answer.append("\t\"protocol_end\":\"");
92 helpers::encode_json(std::to_string(protocol_end), back);
93 answer.append("\",\n");
94
95 answer.append("\t\"username_end\":\"");
96 helpers::encode_json(std::to_string(username_end), back);
97 answer.append("\",\n");
98
99 answer.append("\t\"host_start\":\"");
100 helpers::encode_json(std::to_string(host_start), back);
101 answer.append("\",\n");
102
103 answer.append("\t\"host_end\":\"");
104 helpers::encode_json(std::to_string(host_end), back);
105 answer.append("\",\n");
106
107 answer.append("\t\"port\":\"");
108 helpers::encode_json(std::to_string(port), back);
109 answer.append("\",\n");
110
111 answer.append("\t\"pathname_start\":\"");
112 helpers::encode_json(std::to_string(pathname_start), back);
113 answer.append("\",\n");
114
115 answer.append("\t\"search_start\":\"");
116 helpers::encode_json(std::to_string(search_start), back);
117 answer.append("\",\n");
118
119 answer.append("\t\"hash_start\":\"");
120 helpers::encode_json(std::to_string(hash_start), back);
121 answer.append("\",\n");
122
123 answer.append("\n}");
124 return answer;
125}
126
127} // namespace ada
Includes all definitions for Ada.
Definitions for helper functions used within Ada.
Definition ada_idna.h:13
ada_warn_unused ada::result< result_type > parse(std::string_view input, const result_type *base_url=nullptr)
bool check_offset_consistency() const noexcept
std::string to_string() const
static constexpr uint32_t omitted
Declaration for the URL Components.