From e29362d80fdde220bdde3a43a646b7db697d6384 Mon Sep 17 00:00:00 2001 From: lifegpc Date: Mon, 27 Mar 2023 11:18:28 +0000 Subject: [PATCH] CookieJar iter return &Cookie now --- src/cookies.rs | 41 +++++++++++++++++++++++++++++++---------- src/webclient.rs | 14 ++++---------- 2 files changed, 35 insertions(+), 20 deletions(-) diff --git a/src/cookies.rs b/src/cookies.rs index 194f868..84d492e 100644 --- a/src/cookies.rs +++ b/src/cookies.rs @@ -355,14 +355,9 @@ impl CookieJar { #[allow(dead_code)] pub fn get + ?Sized>(&self, name: &S) -> Option<&Cookie> { let name = name.as_ref(); - for i in self.cookies.iter() { - match i { - CookieJarLine::Cookie(i) => { - if i._name == name { - return Some(i); - } - } - _ => {} + for i in self.iter() { + if i._name == name { + return Some(i); } } None @@ -448,8 +443,34 @@ impl CookieJar { true } - pub fn iter(&self) -> core::slice::Iter { - self.cookies.iter() + pub fn iter<'a>(&'a self) -> CookieJarItor<'a> { + CookieJarItor { + iter: self.cookies.iter(), + } + } +} + +pub struct CookieJarItor<'a> { + iter: core::slice::Iter<'a, CookieJarLine>, +} + +impl<'a> Iterator for CookieJarItor<'a> { + type Item = &'a Cookie; + fn next(&mut self) -> Option { + loop { + match self.iter.next() { + Some(item) => match item { + CookieJarLine::Cookie(c) => { + return Some(c); + } + _ => {} + }, + None => { + break; + } + } + } + None } } diff --git a/src/webclient.rs b/src/webclient.rs index 7a4901e..59b058c 100644 --- a/src/webclient.rs +++ b/src/webclient.rs @@ -1,5 +1,4 @@ use crate::cookies::Cookie; -use crate::cookies::CookieJarLine; use crate::cookies::ManagedCookieJar; use crate::ext::atomic::AtomicQuick; use crate::ext::json::ToJson; @@ -64,16 +63,11 @@ pub fn gen_cookie_header(c: &WebClient, url: U) -> String { let mut s = String::from(""); let u = url.as_str(); for a in c.get_cookies().jar.get_ref().iter() { - match a { - CookieJarLine::Cookie(a) => { - if a.matched(u) { - if s.len() > 0 { - s += " "; - } - s += a.get_name_value().as_str(); - } + if a.matched(u) { + if s.len() > 0 { + s += " "; } - _ => {} + s += a.get_name_value().as_str(); } } s