Skip to content

Commit d0b2219

Browse files
committed
address reviews
1 parent 1645a79 commit d0b2219

File tree

1 file changed

+70
-55
lines changed

1 file changed

+70
-55
lines changed

src/url_search_params.rs

+70-55
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use crate::{ffi, ParseUrlError};
22

3+
#[derive(Hash)]
34
pub struct UrlSearchParams(*mut ffi::ada_url_search_params);
45

56
impl Drop for UrlSearchParams {
@@ -14,7 +15,7 @@ impl UrlSearchParams {
1415
/// ```
1516
/// use ada_url::UrlSearchParams;
1617
/// 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.");
1819
/// assert_eq!(params.get("a"), Some("1"));
1920
/// assert_eq!(params.get("b"), Some("2"));
2021
/// ```
@@ -27,13 +28,15 @@ impl UrlSearchParams {
2728
}))
2829
}
2930

30-
/// Returns the size of the UrlSearchParams struct.
31+
/// Returns the unique keys in a UrlSearchParams.
3132
///
3233
/// ```
3334
/// use ada_url::UrlSearchParams;
3435
/// 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.");
3637
/// assert_eq!(params.len(), 2);
38+
/// let keys = params.keys().into_iter();
39+
/// assert_eq!(keys.count(), params.len());
3740
/// ```
3841
pub fn len(&self) -> usize {
3942
unsafe { ffi::ada_search_params_size(self.0) }
@@ -68,7 +71,7 @@ impl UrlSearchParams {
6871
/// ```
6972
/// use ada_url::UrlSearchParams;
7073
/// 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.");
7275
/// params.set("a", "3");
7376
/// assert_eq!(params.get("a"), Some("3"));
7477
/// ```
@@ -84,30 +87,37 @@ impl UrlSearchParams {
8487
}
8588
}
8689

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.
9091
///
9192
/// ```
9293
/// use ada_url::UrlSearchParams;
9394
/// 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");
9697
/// assert_eq!(params.get("a"), None);
9798
/// ```
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+
)
111121
}
112122
}
113123

@@ -116,22 +126,30 @@ impl UrlSearchParams {
116126
/// ```
117127
/// use ada_url::UrlSearchParams;
118128
/// 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);
121131
/// ```
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+
)
135153
}
136154
}
137155

@@ -140,7 +158,7 @@ impl UrlSearchParams {
140158
/// ```
141159
/// use ada_url::UrlSearchParams;
142160
/// 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.");
144162
/// assert_eq!(params.get("a"), Some("1"));
145163
/// assert_eq!(params.get("c"), None);
146164
/// ```
@@ -160,7 +178,7 @@ impl UrlSearchParams {
160178
/// ```
161179
/// use ada_url::UrlSearchParams;
162180
/// 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.");
164182
/// let pairs = params.get_all("a");
165183
/// assert_eq!(pairs.len(), 2);
166184
/// ```
@@ -177,20 +195,20 @@ impl UrlSearchParams {
177195
/// ```
178196
/// use ada_url::UrlSearchParams;
179197
/// 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.");
181199
/// let mut keys = params.keys();
182200
/// assert!(keys.next().is_some());
183201
pub fn keys(&self) -> UrlSearchParamsKeyIterator {
184202
let iterator = unsafe { ffi::ada_search_params_get_keys(self.0) };
185203
UrlSearchParamsKeyIterator::new(iterator)
186204
}
187205

188-
/// Returns all keys as an iterator
206+
/// Returns all values as an iterator
189207
///
190208
/// ```
191209
/// use ada_url::UrlSearchParams;
192210
/// 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.");
194212
/// let mut values = params.values();
195213
/// assert!(values.next().is_some());
196214
pub fn values(&self) -> UrlSearchParamsValueIterator {
@@ -203,7 +221,7 @@ impl UrlSearchParams {
203221
/// ```
204222
/// use ada_url::UrlSearchParams;
205223
/// 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.");
207225
/// let mut entries = params.entries();
208226
/// assert_eq!(entries.next(), Some(("a", "1")));
209227
/// ```
@@ -213,12 +231,6 @@ impl UrlSearchParams {
213231
}
214232
}
215233

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-
222234
#[cfg(feature = "std")]
223235
impl core::str::FromStr for UrlSearchParams {
224236
type Err = ParseUrlError<Box<str>>;
@@ -235,7 +247,7 @@ impl core::str::FromStr for UrlSearchParams {
235247
/// ```
236248
/// use ada_url::UrlSearchParams;
237249
/// 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.");
239251
/// assert_eq!(params.to_string(), "a=1&b=2");
240252
/// ```
241253
impl core::fmt::Display for UrlSearchParams {
@@ -254,7 +266,7 @@ where
254266
///```
255267
/// use ada_url::UrlSearchParams;
256268
/// 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.");
258270
/// assert_eq!(params.len(), 2);
259271
/// params.extend([("foo", "bar")]);
260272
/// assert_eq!(params.len(), 3);
@@ -281,14 +293,15 @@ where
281293
/// ```
282294
fn from_iter<T: IntoIterator<Item = (Input, Input)>>(iter: T) -> Self {
283295
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");
285297
for item in iter {
286298
params.append(item.0.as_ref(), item.1.as_ref());
287299
}
288300
params
289301
}
290302
}
291303

304+
#[derive(Hash)]
292305
pub struct UrlSearchParamsKeyIterator<'a> {
293306
iterator: *mut ffi::ada_url_search_params_keys_iter,
294307
_phantom: core::marker::PhantomData<&'a str>,
@@ -314,6 +327,7 @@ impl<'a> Iterator for UrlSearchParamsKeyIterator<'a> {
314327
}
315328
}
316329

330+
#[derive(Hash)]
317331
pub struct UrlSearchParamsValueIterator<'a> {
318332
iterator: *mut ffi::ada_url_search_params_values_iter,
319333
_phantom: core::marker::PhantomData<&'a str>,
@@ -379,7 +393,7 @@ impl<'a> UrlSearchParamsEntry<'a> {
379393
/// ```
380394
/// use ada_url::UrlSearchParams;
381395
/// 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.");
383397
/// let pairs = params.get_all("a");
384398
/// assert_eq!(pairs.is_empty(), false);
385399
/// ```
@@ -392,7 +406,7 @@ impl<'a> UrlSearchParamsEntry<'a> {
392406
/// ```
393407
/// use ada_url::UrlSearchParams;
394408
/// 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.");
396410
/// let pairs = params.get_all("a");
397411
/// assert_eq!(pairs.len(), 1);
398412
/// ```
@@ -405,7 +419,7 @@ impl<'a> UrlSearchParamsEntry<'a> {
405419
/// ```
406420
/// use ada_url::UrlSearchParams;
407421
/// 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.");
409423
/// let pairs = params.get_all("a");
410424
/// assert_eq!(pairs.len(), 2);
411425
/// assert_eq!(pairs.get(0), Some("1"));
@@ -446,6 +460,7 @@ impl<'a> From<UrlSearchParamsEntry<'a>> for Vec<&'a str> {
446460
}
447461
}
448462

463+
#[derive(Hash)]
449464
pub struct UrlSearchParamsEntryIterator<'a> {
450465
iterator: *mut ffi::ada_url_search_params_entries_iter,
451466
_phantom: core::marker::PhantomData<&'a str>,

0 commit comments

Comments
 (0)