1use crate::RequestCookie;
5use std::borrow::Cow;
6use std::slice::Iter;
7
8pub struct CookiesForName<'map, 'cookie> {
14 pub(crate) iter: Iter<'map, Cow<'cookie, str>>,
15 pub(crate) name: Cow<'cookie, str>,
16}
17
18impl<'map, 'cookie> CookiesForName<'map, 'cookie> {
19 pub fn values(&self) -> CookieValuesForName<'map, 'cookie> {
20 CookieValuesForName {
21 iter: self.iter.clone(),
22 }
23 }
24}
25
26impl<'cookie> Iterator for CookiesForName<'_, 'cookie> {
27 type Item = RequestCookie<'cookie>;
28
29 fn next(&mut self) -> Option<Self::Item> {
30 self.iter
31 .next()
32 .map(|value| RequestCookie::new(self.name.clone(), value.clone()))
33 }
34
35 fn size_hint(&self) -> (usize, Option<usize>) {
36 self.iter.size_hint()
37 }
38}
39
40pub struct CookieValuesForName<'map, 'cookie> {
44 pub(crate) iter: Iter<'map, Cow<'cookie, str>>,
45}
46
47impl<'map> Iterator for CookieValuesForName<'map, '_> {
48 type Item = &'map str;
49
50 fn next(&mut self) -> Option<Self::Item> {
51 self.iter.next().map(|value| value.as_ref())
52 }
53
54 fn size_hint(&self) -> (usize, Option<usize>) {
55 self.iter.size_hint()
56 }
57}
58
59impl ExactSizeIterator for CookiesForName<'_, '_> {}
60
61impl ExactSizeIterator for CookieValuesForName<'_, '_> {}
62
63impl DoubleEndedIterator for CookiesForName<'_, '_> {
64 fn next_back(&mut self) -> Option<Self::Item> {
65 self.iter
66 .next_back()
67 .map(|value| RequestCookie::new(self.name.clone(), value.clone()))
68 }
69}
70
71impl DoubleEndedIterator for CookieValuesForName<'_, '_> {
72 fn next_back(&mut self) -> Option<Self::Item> {
73 self.iter.next_back().map(|value| value.as_ref())
74 }
75}
76
77impl std::iter::FusedIterator for CookiesForName<'_, '_> {}
78
79impl std::iter::FusedIterator for CookieValuesForName<'_, '_> {}