1
1
use crate :: { ffi, ParseUrlError } ;
2
2
3
+ #[ derive( Hash ) ]
3
4
pub struct UrlSearchParams ( * mut ffi:: ada_url_search_params ) ;
4
5
5
6
impl Drop for UrlSearchParams {
@@ -14,7 +15,7 @@ impl UrlSearchParams {
14
15
/// ```
15
16
/// use ada_url::UrlSearchParams;
16
17
/// let params = UrlSearchParams::parse("a=1&b=2")
17
- /// .expect("This is a valid UrlSearchParams. Should have parsed it .");
18
+ /// .expect("String should have been able to be parsed into an UrlSearchParams .");
18
19
/// assert_eq!(params.get("a"), Some("1"));
19
20
/// assert_eq!(params.get("b"), Some("2"));
20
21
/// ```
@@ -27,13 +28,15 @@ impl UrlSearchParams {
27
28
} ) )
28
29
}
29
30
30
- /// Returns the size of the UrlSearchParams struct .
31
+ /// Returns the unique keys in a UrlSearchParams .
31
32
///
32
33
/// ```
33
34
/// use ada_url::UrlSearchParams;
34
35
/// let params = UrlSearchParams::parse("a=1&b=2")
35
- /// .expect("This is a valid UrlSearchParams. Should have parsed it .");
36
+ /// .expect("String should have been able to be parsed into an UrlSearchParams .");
36
37
/// assert_eq!(params.len(), 2);
38
+ /// let keys = params.keys().into_iter();
39
+ /// assert_eq!(keys.count(), params.len());
37
40
/// ```
38
41
pub fn len ( & self ) -> usize {
39
42
unsafe { ffi:: ada_search_params_size ( self . 0 ) }
@@ -68,7 +71,7 @@ impl UrlSearchParams {
68
71
/// ```
69
72
/// use ada_url::UrlSearchParams;
70
73
/// let mut params = UrlSearchParams::parse("a=1&b=2")
71
- /// .expect("This is a valid UrlSearchParams. Should have parsed it .");
74
+ /// .expect("String should have been able to be parsed into an UrlSearchParams .");
72
75
/// params.set("a", "3");
73
76
/// assert_eq!(params.get("a"), Some("3"));
74
77
/// ```
@@ -84,30 +87,37 @@ impl UrlSearchParams {
84
87
}
85
88
}
86
89
87
- /// Removes a key/value from the UrlSearchParams struct.
88
- /// Depending on the value parameter, it will either remove
89
- /// the key/value pair or just the key.
90
+ /// Removes a key from the UrlSearchParams struct.
90
91
///
91
92
/// ```
92
93
/// use ada_url::UrlSearchParams;
93
94
/// let mut params = UrlSearchParams::parse("a=1&b=2")
94
- /// .expect("This is a valid UrlSearchParams. Should have parsed it .");
95
- /// params.remove ("a", Some("1") );
95
+ /// .expect("String should have been able to be parsed into an UrlSearchParams .");
96
+ /// params.remove_key ("a");
96
97
/// assert_eq!(params.get("a"), None);
97
98
/// ```
98
- pub fn remove ( & mut self , key : & str , value : Option < & str > ) {
99
- if let Some ( value) = value {
100
- unsafe {
101
- ffi:: ada_search_params_remove_value (
102
- self . 0 ,
103
- key. as_ptr ( ) . cast ( ) ,
104
- key. len ( ) ,
105
- value. as_ptr ( ) . cast ( ) ,
106
- value. len ( ) ,
107
- )
108
- }
109
- } else {
110
- unsafe { ffi:: ada_search_params_remove ( self . 0 , key. as_ptr ( ) . cast ( ) , key. len ( ) ) }
99
+ pub fn remove_key ( & mut self , key : & str ) {
100
+ unsafe { ffi:: ada_search_params_remove ( self . 0 , key. as_ptr ( ) . cast ( ) , key. len ( ) ) }
101
+ }
102
+
103
+ /// Removes a key with a value from the UrlSearchParams struct.
104
+ ///
105
+ /// ```
106
+ /// use ada_url::UrlSearchParams;
107
+ /// let mut params = UrlSearchParams::parse("a=1&b=2")
108
+ /// .expect("String should have been able to be parsed into an UrlSearchParams.");
109
+ /// params.remove("a", "1");
110
+ /// assert_eq!(params.get("a"), None);
111
+ /// ```
112
+ pub fn remove ( & mut self , key : & str , value : & str ) {
113
+ unsafe {
114
+ ffi:: ada_search_params_remove_value (
115
+ self . 0 ,
116
+ key. as_ptr ( ) . cast ( ) ,
117
+ key. len ( ) ,
118
+ value. as_ptr ( ) . cast ( ) ,
119
+ value. len ( ) ,
120
+ )
111
121
}
112
122
}
113
123
@@ -116,22 +126,30 @@ impl UrlSearchParams {
116
126
/// ```
117
127
/// use ada_url::UrlSearchParams;
118
128
/// let params = UrlSearchParams::parse("a=1&b=2")
119
- /// .expect("This is a valid UrlSearchParams. Should have parsed it .");
120
- /// assert_eq!(params.contains ("a", None ), true);
129
+ /// .expect("String should have been able to be parsed into an UrlSearchParams .");
130
+ /// assert_eq!(params.contains_key ("a"), true);
121
131
/// ```
122
- pub fn contains ( & self , key : & str , value : Option < & str > ) -> bool {
123
- if let Some ( value) = value {
124
- unsafe {
125
- ffi:: ada_search_params_has_value (
126
- self . 0 ,
127
- key. as_ptr ( ) . cast ( ) ,
128
- key. len ( ) ,
129
- value. as_ptr ( ) . cast ( ) ,
130
- value. len ( ) ,
131
- )
132
- }
133
- } else {
134
- unsafe { ffi:: ada_search_params_has ( self . 0 , key. as_ptr ( ) . cast ( ) , key. len ( ) ) }
132
+ pub fn contains_key ( & self , key : & str ) -> bool {
133
+ unsafe { ffi:: ada_search_params_has ( self . 0 , key. as_ptr ( ) . cast ( ) , key. len ( ) ) }
134
+ }
135
+
136
+ /// Returns whether the [`UrlSearchParams`] contains the `key` with the `value`.
137
+ ///
138
+ /// ```
139
+ /// use ada_url::UrlSearchParams;
140
+ /// let params = UrlSearchParams::parse("a=1&b=2")
141
+ /// .expect("String should have been able to be parsed into an UrlSearchParams.");
142
+ /// assert_eq!(params.contains("a", "1"), true);
143
+ /// ```
144
+ pub fn contains ( & self , key : & str , value : & str ) -> bool {
145
+ unsafe {
146
+ ffi:: ada_search_params_has_value (
147
+ self . 0 ,
148
+ key. as_ptr ( ) . cast ( ) ,
149
+ key. len ( ) ,
150
+ value. as_ptr ( ) . cast ( ) ,
151
+ value. len ( ) ,
152
+ )
135
153
}
136
154
}
137
155
@@ -140,7 +158,7 @@ impl UrlSearchParams {
140
158
/// ```
141
159
/// use ada_url::UrlSearchParams;
142
160
/// let params = UrlSearchParams::parse("a=1&b=2")
143
- /// .expect("This is a valid UrlSearchParams. Should have parsed it .");
161
+ /// .expect("String should have been able to be parsed into an UrlSearchParams .");
144
162
/// assert_eq!(params.get("a"), Some("1"));
145
163
/// assert_eq!(params.get("c"), None);
146
164
/// ```
@@ -160,7 +178,7 @@ impl UrlSearchParams {
160
178
/// ```
161
179
/// use ada_url::UrlSearchParams;
162
180
/// let params = UrlSearchParams::parse("a=1&a=2")
163
- /// .expect("This is a valid UrlSearchParams. Should have parsed it .");
181
+ /// .expect("String should have been able to be parsed into an UrlSearchParams .");
164
182
/// let pairs = params.get_all("a");
165
183
/// assert_eq!(pairs.len(), 2);
166
184
/// ```
@@ -177,20 +195,20 @@ impl UrlSearchParams {
177
195
/// ```
178
196
/// use ada_url::UrlSearchParams;
179
197
/// let params = UrlSearchParams::parse("a=1")
180
- /// .expect("This is a valid UrlSearchParams. Should have parsed it .");
198
+ /// .expect("String should have been able to be parsed into an UrlSearchParams .");
181
199
/// let mut keys = params.keys();
182
200
/// assert!(keys.next().is_some());
183
201
pub fn keys ( & self ) -> UrlSearchParamsKeyIterator {
184
202
let iterator = unsafe { ffi:: ada_search_params_get_keys ( self . 0 ) } ;
185
203
UrlSearchParamsKeyIterator :: new ( iterator)
186
204
}
187
205
188
- /// Returns all keys as an iterator
206
+ /// Returns all values as an iterator
189
207
///
190
208
/// ```
191
209
/// use ada_url::UrlSearchParams;
192
210
/// let params = UrlSearchParams::parse("a=1")
193
- /// .expect("This is a valid UrlSearchParams. Should have parsed it .");
211
+ /// .expect("String should have been able to be parsed into an UrlSearchParams .");
194
212
/// let mut values = params.values();
195
213
/// assert!(values.next().is_some());
196
214
pub fn values ( & self ) -> UrlSearchParamsValueIterator {
@@ -203,7 +221,7 @@ impl UrlSearchParams {
203
221
/// ```
204
222
/// use ada_url::UrlSearchParams;
205
223
/// let params = UrlSearchParams::parse("a=1")
206
- /// .expect("This is a valid UrlSearchParams. Should have parsed it .");
224
+ /// .expect("String should have been able to be parsed into an UrlSearchParams .");
207
225
/// let mut entries = params.entries();
208
226
/// assert_eq!(entries.next(), Some(("a", "1")));
209
227
/// ```
@@ -213,12 +231,6 @@ impl UrlSearchParams {
213
231
}
214
232
}
215
233
216
- impl core:: hash:: Hash for UrlSearchParams {
217
- fn hash < H : core:: hash:: Hasher > ( & self , state : & mut H ) {
218
- self . 0 . hash ( state) ;
219
- }
220
- }
221
-
222
234
#[ cfg( feature = "std" ) ]
223
235
impl core:: str:: FromStr for UrlSearchParams {
224
236
type Err = ParseUrlError < Box < str > > ;
@@ -235,7 +247,7 @@ impl core::str::FromStr for UrlSearchParams {
235
247
/// ```
236
248
/// use ada_url::UrlSearchParams;
237
249
/// let params = UrlSearchParams::parse("a=1&b=2")
238
- /// .expect("This is a valid UrlSearchParams. Should have parsed it .");
250
+ /// .expect("String should have been able to be parsed into an UrlSearchParams .");
239
251
/// assert_eq!(params.to_string(), "a=1&b=2");
240
252
/// ```
241
253
impl core:: fmt:: Display for UrlSearchParams {
@@ -254,7 +266,7 @@ where
254
266
///```
255
267
/// use ada_url::UrlSearchParams;
256
268
/// let mut params = UrlSearchParams::parse("a=1&b=2")
257
- /// .expect("This is a valid UrlSearchParams. Should have parsed it .");
269
+ /// .expect("String should have been able to be parsed into an UrlSearchParams .");
258
270
/// assert_eq!(params.len(), 2);
259
271
/// params.extend([("foo", "bar")]);
260
272
/// assert_eq!(params.len(), 3);
@@ -281,14 +293,15 @@ where
281
293
/// ```
282
294
fn from_iter < T : IntoIterator < Item = ( Input , Input ) > > ( iter : T ) -> Self {
283
295
let mut params = UrlSearchParams :: parse ( "" )
284
- . expect ( "Failed to parse empty string. This is likely due to a bug" ) ;
296
+ . expect ( "Should be able to parse empty string. This is likely due to a bug" ) ;
285
297
for item in iter {
286
298
params. append ( item. 0 . as_ref ( ) , item. 1 . as_ref ( ) ) ;
287
299
}
288
300
params
289
301
}
290
302
}
291
303
304
+ #[ derive( Hash ) ]
292
305
pub struct UrlSearchParamsKeyIterator < ' a > {
293
306
iterator : * mut ffi:: ada_url_search_params_keys_iter ,
294
307
_phantom : core:: marker:: PhantomData < & ' a str > ,
@@ -314,6 +327,7 @@ impl<'a> Iterator for UrlSearchParamsKeyIterator<'a> {
314
327
}
315
328
}
316
329
330
+ #[ derive( Hash ) ]
317
331
pub struct UrlSearchParamsValueIterator < ' a > {
318
332
iterator : * mut ffi:: ada_url_search_params_values_iter ,
319
333
_phantom : core:: marker:: PhantomData < & ' a str > ,
@@ -379,7 +393,7 @@ impl<'a> UrlSearchParamsEntry<'a> {
379
393
/// ```
380
394
/// use ada_url::UrlSearchParams;
381
395
/// let params = UrlSearchParams::parse("a=1&b=2")
382
- /// .expect("This is a valid UrlSearchParams. Should have parsed it .");
396
+ /// .expect("String should have been able to be parsed into an UrlSearchParams .");
383
397
/// let pairs = params.get_all("a");
384
398
/// assert_eq!(pairs.is_empty(), false);
385
399
/// ```
@@ -392,7 +406,7 @@ impl<'a> UrlSearchParamsEntry<'a> {
392
406
/// ```
393
407
/// use ada_url::UrlSearchParams;
394
408
/// let params = UrlSearchParams::parse("a=1&b=2")
395
- /// .expect("This is a valid UrlSearchParams. Should have parsed it .");
409
+ /// .expect("String should have been able to be parsed into an UrlSearchParams .");
396
410
/// let pairs = params.get_all("a");
397
411
/// assert_eq!(pairs.len(), 1);
398
412
/// ```
@@ -405,7 +419,7 @@ impl<'a> UrlSearchParamsEntry<'a> {
405
419
/// ```
406
420
/// use ada_url::UrlSearchParams;
407
421
/// let params = UrlSearchParams::parse("a=1&a=2")
408
- /// .expect("This is a valid UrlSearchParams. Should have parsed it .");
422
+ /// .expect("String should have been able to be parsed into an UrlSearchParams .");
409
423
/// let pairs = params.get_all("a");
410
424
/// assert_eq!(pairs.len(), 2);
411
425
/// assert_eq!(pairs.get(0), Some("1"));
@@ -446,6 +460,7 @@ impl<'a> From<UrlSearchParamsEntry<'a>> for Vec<&'a str> {
446
460
}
447
461
}
448
462
463
+ #[ derive( Hash ) ]
449
464
pub struct UrlSearchParamsEntryIterator < ' a > {
450
465
iterator : * mut ffi:: ada_url_search_params_entries_iter ,
451
466
_phantom : core:: marker:: PhantomData < & ' a str > ,
0 commit comments