@@ -52,11 +52,33 @@ inline constexpr auto is_fragment_byte(std::byte value) {
5252// /
5353// / \param value
5454// / \return
55- inline constexpr auto is_path_byte (std::byte value) {
55+ inline constexpr auto is_query_byte (std::byte value) {
5656 return
57- is_fragment_byte (value) ||
57+ is_c0_control_byte (value) ||
58+ (value == std::byte (0x20 )) ||
59+ (value == std::byte (0x22 )) ||
5860 (value == std::byte (0x23 )) ||
61+ (value == std::byte (0x3c )) ||
62+ (value == std::byte (0x3e ));
63+ }
64+
65+ // /
66+ // / \param value
67+ // / \return
68+ inline constexpr auto is_special_query_byte (std::byte value) {
69+ return
70+ is_query_byte (value) ||
71+ (value == std::byte (0x27 ));
72+ }
73+
74+ // /
75+ // / \param value
76+ // / \return
77+ inline constexpr auto is_path_byte (std::byte value) {
78+ return
79+ is_query_byte (value) ||
5980 (value == std::byte (0x3f )) ||
81+ (value == std::byte (0x60 )) ||
6082 (value == std::byte (0x7b )) ||
6183 (value == std::byte (0x7d ));
6284}
@@ -78,20 +100,39 @@ inline constexpr auto is_userinfo_byte(std::byte value) {
78100 (value == std::byte (0x5e )) ||
79101 (value == std::byte (0x7c ));
80102}
103+
104+ // /
105+ // / \param value
106+ // / \return
107+ inline constexpr auto is_component_byte (std::byte value) {
108+ return
109+ is_userinfo_byte (value) ||
110+ (value == std::byte (0x24 )) ||
111+ (value == std::byte (0x25 )) ||
112+ (value == std::byte (0x26 )) ||
113+ (value == std::byte (0x2b )) ||
114+ (value == std::byte (0x2c ));
115+ }
81116} // namespace details
82117
83118// /
84119enum class encode_set {
85120 // /
86- none = 0 ,
121+ any = 0 ,
87122 // /
88123 c0_control,
89124 // /
90125 fragment,
91126 // /
127+ query,
128+ // /
129+ special_query,
130+ // /
92131 path,
93132 // /
94133 userinfo,
134+ // /
135+ component,
95136};
96137
97138// /
@@ -199,18 +240,24 @@ inline auto percent_encode_byte(std::byte byte, Pred pred) -> percent_encoded_ch
199240
200241// /
201242// / \param value
202- // / \param excludes
243+ // / \param encodes
203244// / \return
204- inline auto percent_encode_byte (std::byte value, encode_set excludes ) -> percent_encoded_char {
205- switch (excludes ) {
206- case encode_set::none :
245+ inline auto percent_encode_byte (std::byte value, encode_set encodes ) -> percent_encoded_char {
246+ switch (encodes ) {
247+ case encode_set::any :
207248 return percent_encoding::percent_encoded_char (value);
208249 case encode_set::c0_control:
209250 return percent_encode_byte (value, details::is_c0_control_byte);
251+ case encode_set::component:
252+ return percent_encode_byte (value, details::is_component_byte);
210253 case encode_set::userinfo:
211254 return percent_encode_byte (value, details::is_userinfo_byte);
212255 case encode_set::path:
213256 return percent_encode_byte (value, details::is_path_byte);
257+ case encode_set::special_query:
258+ return percent_encode_byte (value, details::is_special_query_byte);
259+ case encode_set::query:
260+ return percent_encode_byte (value, details::is_query_byte);
214261 case encode_set::fragment:
215262 return percent_encode_byte (value, details::is_fragment_byte);
216263 }
0 commit comments