@@ -179,10 +179,10 @@ impl URLSearchParams {
179
179
/// let params = URLSearchParams::parse("a=1")
180
180
/// .expect("This is a valid URLSearchParams. Should have parsed it.");
181
181
/// let mut keys = params.keys();
182
- /// assert!(keys.has_next ());
183
- pub fn keys ( & self ) -> URLSearchParamsKeysIterator {
182
+ /// assert!(keys.next().is_some ());
183
+ pub fn keys ( & self ) -> URLSearchParamsKeyIterator {
184
184
let iterator = unsafe { ffi:: ada_search_params_get_keys ( self . 0 ) } ;
185
- URLSearchParamsKeysIterator :: new ( iterator)
185
+ URLSearchParamsKeyIterator :: new ( iterator)
186
186
}
187
187
188
188
/// Returns all keys as an iterator
@@ -192,10 +192,24 @@ impl URLSearchParams {
192
192
/// let params = URLSearchParams::parse("a=1")
193
193
/// .expect("This is a valid URLSearchParams. Should have parsed it.");
194
194
/// let mut values = params.values();
195
- /// assert!(values.has_next ());
196
- pub fn values ( & self ) -> URLSearchParamsValuesIterator {
195
+ /// assert!(values.next().is_some ());
196
+ pub fn values ( & self ) -> URLSearchParamsValueIterator {
197
197
let iterator = unsafe { ffi:: ada_search_params_get_values ( self . 0 ) } ;
198
- URLSearchParamsValuesIterator :: new ( iterator)
198
+ URLSearchParamsValueIterator :: new ( iterator)
199
+ }
200
+
201
+ /// Returns all entries as an iterator
202
+ ///
203
+ /// ```
204
+ /// use ada_url::URLSearchParams;
205
+ /// let params = URLSearchParams::parse("a=1")
206
+ /// .expect("This is a valid URLSearchParams. Should have parsed it.");
207
+ /// let mut entries = params.entries();
208
+ /// assert_eq!(entries.next(), Some(("a", "1")));
209
+ /// ```
210
+ pub fn entries ( & self ) -> URLSearchParamsEntryIterator {
211
+ let iterator = unsafe { ffi:: ada_search_params_get_entries ( self . 0 ) } ;
212
+ URLSearchParamsEntryIterator :: new ( iterator)
199
213
}
200
214
}
201
215
@@ -269,96 +283,76 @@ where
269
283
}
270
284
}
271
285
272
- pub struct URLSearchParamsKeysIterator < ' a > {
286
+ pub struct URLSearchParamsKeyIterator < ' a > {
273
287
iterator : * mut ffi:: ada_url_search_params_keys_iter ,
274
288
_phantom : core:: marker:: PhantomData < & ' a str > ,
275
289
}
276
290
277
- impl Drop for URLSearchParamsKeysIterator < ' _ > {
291
+ impl Drop for URLSearchParamsKeyIterator < ' _ > {
278
292
fn drop ( & mut self ) {
279
293
unsafe { ffi:: ada_free_search_params_keys_iter ( self . iterator ) }
280
294
}
281
295
}
282
296
283
- impl < ' a > Iterator for URLSearchParamsKeysIterator < ' a > {
297
+ impl < ' a > Iterator for URLSearchParamsKeyIterator < ' a > {
284
298
type Item = & ' a str ;
285
299
286
300
fn next ( & mut self ) -> Option < Self :: Item > {
287
- self . get_next ( )
288
- }
289
- }
290
-
291
- impl < ' a > URLSearchParamsKeysIterator < ' a > {
292
- /// Returns true if iterator has a next value.
293
- pub fn has_next ( & self ) -> bool {
294
- unsafe { ffi:: ada_search_params_keys_iter_has_next ( self . iterator ) }
295
- }
296
-
297
- /// Returns a new value if it's available
298
- pub fn get_next ( & mut self ) -> Option < & ' a str > {
299
- if self . has_next ( ) {
300
- return None ;
301
+ let has_next = unsafe { ffi:: ada_search_params_keys_iter_has_next ( self . iterator ) } ;
302
+ if has_next {
303
+ let string = unsafe { ffi:: ada_search_params_keys_iter_next ( self . iterator ) } ;
304
+ Some ( string. as_str ( ) )
305
+ } else {
306
+ None
301
307
}
302
- let string = unsafe { ffi:: ada_search_params_keys_iter_next ( self . iterator ) } ;
303
- Some ( string. as_str ( ) )
304
308
}
305
309
}
306
310
307
- pub struct URLSearchParamsValuesIterator < ' a > {
311
+ pub struct URLSearchParamsValueIterator < ' a > {
308
312
iterator : * mut ffi:: ada_url_search_params_values_iter ,
309
313
_phantom : core:: marker:: PhantomData < & ' a str > ,
310
314
}
311
315
312
- impl < ' a > URLSearchParamsKeysIterator < ' a > {
313
- fn new ( iterator : * mut ffi:: ada_url_search_params_keys_iter ) -> URLSearchParamsKeysIterator < ' a > {
314
- URLSearchParamsKeysIterator {
316
+ impl < ' a > URLSearchParamsKeyIterator < ' a > {
317
+ fn new ( iterator : * mut ffi:: ada_url_search_params_keys_iter ) -> URLSearchParamsKeyIterator < ' a > {
318
+ URLSearchParamsKeyIterator {
315
319
iterator,
316
320
_phantom : core:: marker:: PhantomData ,
317
321
}
318
322
}
319
323
}
320
324
321
- impl Drop for URLSearchParamsValuesIterator < ' _ > {
325
+ impl Drop for URLSearchParamsValueIterator < ' _ > {
322
326
fn drop ( & mut self ) {
323
327
unsafe { ffi:: ada_free_search_params_values_iter ( self . iterator ) }
324
328
}
325
329
}
326
330
327
- impl < ' a > Iterator for URLSearchParamsValuesIterator < ' a > {
331
+ impl < ' a > Iterator for URLSearchParamsValueIterator < ' a > {
328
332
type Item = & ' a str ;
329
333
330
334
fn next ( & mut self ) -> Option < Self :: Item > {
331
- self . get_next ( )
335
+ let has_next = unsafe { ffi:: ada_search_params_values_iter_has_next ( self . iterator ) } ;
336
+ if has_next {
337
+ let string = unsafe { ffi:: ada_search_params_values_iter_next ( self . iterator ) } ;
338
+ Some ( string. as_str ( ) )
339
+ } else {
340
+ None
341
+ }
332
342
}
333
343
}
334
344
335
- impl < ' a > URLSearchParamsValuesIterator < ' a > {
345
+ impl < ' a > URLSearchParamsValueIterator < ' a > {
336
346
fn new (
337
347
iterator : * mut ffi:: ada_url_search_params_values_iter ,
338
- ) -> URLSearchParamsValuesIterator < ' a > {
339
- URLSearchParamsValuesIterator {
348
+ ) -> URLSearchParamsValueIterator < ' a > {
349
+ URLSearchParamsValueIterator {
340
350
iterator,
341
351
_phantom : core:: marker:: PhantomData ,
342
352
}
343
353
}
344
354
}
345
355
346
- impl < ' a > URLSearchParamsValuesIterator < ' a > {
347
- /// Returns true if iterator has a next value.
348
- pub fn has_next ( & self ) -> bool {
349
- unsafe { ffi:: ada_search_params_values_iter_has_next ( self . iterator ) }
350
- }
351
-
352
- /// Returns a new value if it's available
353
- pub fn get_next ( & mut self ) -> Option < & ' a str > {
354
- if self . has_next ( ) {
355
- return None ;
356
- }
357
- let string = unsafe { ffi:: ada_search_params_values_iter_next ( self . iterator ) } ;
358
- Some ( string. as_str ( ) )
359
- }
360
- }
361
-
362
356
pub struct URLSearchParamsEntry < ' a > {
363
357
strings : * mut ffi:: ada_strings ,
364
358
size : usize ,
@@ -445,3 +439,39 @@ impl<'a> From<URLSearchParamsEntry<'a>> for Vec<&'a str> {
445
439
vec
446
440
}
447
441
}
442
+
443
+ pub struct URLSearchParamsEntryIterator < ' a > {
444
+ iterator : * mut ffi:: ada_url_search_params_entries_iter ,
445
+ _phantom : core:: marker:: PhantomData < & ' a str > ,
446
+ }
447
+
448
+ impl < ' a > URLSearchParamsEntryIterator < ' a > {
449
+ fn new (
450
+ iterator : * mut ffi:: ada_url_search_params_entries_iter ,
451
+ ) -> URLSearchParamsEntryIterator < ' a > {
452
+ URLSearchParamsEntryIterator {
453
+ iterator,
454
+ _phantom : core:: marker:: PhantomData ,
455
+ }
456
+ }
457
+ }
458
+
459
+ impl Drop for URLSearchParamsEntryIterator < ' _ > {
460
+ fn drop ( & mut self ) {
461
+ unsafe { ffi:: ada_free_search_params_entries_iter ( self . iterator ) }
462
+ }
463
+ }
464
+
465
+ impl < ' a > Iterator for URLSearchParamsEntryIterator < ' a > {
466
+ type Item = ( & ' a str , & ' a str ) ;
467
+
468
+ fn next ( & mut self ) -> Option < Self :: Item > {
469
+ let has_next = unsafe { ffi:: ada_search_params_entries_iter_has_next ( self . iterator ) } ;
470
+ if has_next {
471
+ let pair = unsafe { ffi:: ada_search_params_entries_iter_next ( self . iterator ) } ;
472
+ Some ( ( pair. key . as_str ( ) , pair. value . as_str ( ) ) )
473
+ } else {
474
+ None
475
+ }
476
+ }
477
+ }
0 commit comments