@@ -52,11 +52,33 @@ inline constexpr auto is_fragment_byte(std::byte value) {
52
52
// /
53
53
// / \param value
54
54
// / \return
55
- inline constexpr auto is_path_byte (std::byte value) {
55
+ inline constexpr auto is_query_byte (std::byte value) {
56
56
return
57
- is_fragment_byte (value) ||
57
+ is_c0_control_byte (value) ||
58
+ (value == std::byte (0x20 )) ||
59
+ (value == std::byte (0x22 )) ||
58
60
(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) ||
59
80
(value == std::byte (0x3f )) ||
81
+ (value == std::byte (0x60 )) ||
60
82
(value == std::byte (0x7b )) ||
61
83
(value == std::byte (0x7d ));
62
84
}
@@ -78,20 +100,39 @@ inline constexpr auto is_userinfo_byte(std::byte value) {
78
100
(value == std::byte (0x5e )) ||
79
101
(value == std::byte (0x7c ));
80
102
}
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
+ }
81
116
} // namespace details
82
117
83
118
// /
84
119
enum class encode_set {
85
120
// /
86
- none = 0 ,
121
+ any = 0 ,
87
122
// /
88
123
c0_control,
89
124
// /
90
125
fragment,
91
126
// /
127
+ query,
128
+ // /
129
+ special_query,
130
+ // /
92
131
path,
93
132
// /
94
133
userinfo,
134
+ // /
135
+ component,
95
136
};
96
137
97
138
// /
@@ -199,18 +240,24 @@ inline auto percent_encode_byte(std::byte byte, Pred pred) -> percent_encoded_ch
199
240
200
241
// /
201
242
// / \param value
202
- // / \param excludes
243
+ // / \param encodes
203
244
// / \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 :
207
248
return percent_encoding::percent_encoded_char (value);
208
249
case encode_set::c0_control:
209
250
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);
210
253
case encode_set::userinfo:
211
254
return percent_encode_byte (value, details::is_userinfo_byte);
212
255
case encode_set::path:
213
256
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);
214
261
case encode_set::fragment:
215
262
return percent_encode_byte (value, details::is_fragment_byte);
216
263
}
0 commit comments