@@ -179,10 +179,10 @@ impl URLSearchParams {
179179 /// let params = URLSearchParams::parse("a=1")
180180 /// .expect("This is a valid URLSearchParams. Should have parsed it.");
181181 /// 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 {
184184 let iterator = unsafe { ffi:: ada_search_params_get_keys ( self . 0 ) } ;
185- URLSearchParamsKeysIterator :: new ( iterator)
185+ URLSearchParamsKeyIterator :: new ( iterator)
186186 }
187187
188188 /// Returns all keys as an iterator
@@ -192,10 +192,24 @@ impl URLSearchParams {
192192 /// let params = URLSearchParams::parse("a=1")
193193 /// .expect("This is a valid URLSearchParams. Should have parsed it.");
194194 /// 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 {
197197 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)
199213 }
200214}
201215
@@ -269,96 +283,76 @@ where
269283 }
270284}
271285
272- pub struct URLSearchParamsKeysIterator < ' a > {
286+ pub struct URLSearchParamsKeyIterator < ' a > {
273287 iterator : * mut ffi:: ada_url_search_params_keys_iter ,
274288 _phantom : core:: marker:: PhantomData < & ' a str > ,
275289}
276290
277- impl Drop for URLSearchParamsKeysIterator < ' _ > {
291+ impl Drop for URLSearchParamsKeyIterator < ' _ > {
278292 fn drop ( & mut self ) {
279293 unsafe { ffi:: ada_free_search_params_keys_iter ( self . iterator ) }
280294 }
281295}
282296
283- impl < ' a > Iterator for URLSearchParamsKeysIterator < ' a > {
297+ impl < ' a > Iterator for URLSearchParamsKeyIterator < ' a > {
284298 type Item = & ' a str ;
285299
286300 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
301307 }
302- let string = unsafe { ffi:: ada_search_params_keys_iter_next ( self . iterator ) } ;
303- Some ( string. as_str ( ) )
304308 }
305309}
306310
307- pub struct URLSearchParamsValuesIterator < ' a > {
311+ pub struct URLSearchParamsValueIterator < ' a > {
308312 iterator : * mut ffi:: ada_url_search_params_values_iter ,
309313 _phantom : core:: marker:: PhantomData < & ' a str > ,
310314}
311315
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 {
315319 iterator,
316320 _phantom : core:: marker:: PhantomData ,
317321 }
318322 }
319323}
320324
321- impl Drop for URLSearchParamsValuesIterator < ' _ > {
325+ impl Drop for URLSearchParamsValueIterator < ' _ > {
322326 fn drop ( & mut self ) {
323327 unsafe { ffi:: ada_free_search_params_values_iter ( self . iterator ) }
324328 }
325329}
326330
327- impl < ' a > Iterator for URLSearchParamsValuesIterator < ' a > {
331+ impl < ' a > Iterator for URLSearchParamsValueIterator < ' a > {
328332 type Item = & ' a str ;
329333
330334 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+ }
332342 }
333343}
334344
335- impl < ' a > URLSearchParamsValuesIterator < ' a > {
345+ impl < ' a > URLSearchParamsValueIterator < ' a > {
336346 fn new (
337347 iterator : * mut ffi:: ada_url_search_params_values_iter ,
338- ) -> URLSearchParamsValuesIterator < ' a > {
339- URLSearchParamsValuesIterator {
348+ ) -> URLSearchParamsValueIterator < ' a > {
349+ URLSearchParamsValueIterator {
340350 iterator,
341351 _phantom : core:: marker:: PhantomData ,
342352 }
343353 }
344354}
345355
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-
362356pub struct URLSearchParamsEntry < ' a > {
363357 strings : * mut ffi:: ada_strings ,
364358 size : usize ,
@@ -445,3 +439,39 @@ impl<'a> From<URLSearchParamsEntry<'a>> for Vec<&'a str> {
445439 vec
446440 }
447441}
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