use super::{Processor, ResponseCookie, ResponseCookieId};
use crate::cookie::response::ResponseCookiesIter;
#[derive(Default, Debug, Clone)]
pub struct ResponseCookies(biscotti::ResponseCookies<'static>);
impl ResponseCookies {
pub fn new() -> ResponseCookies {
ResponseCookies::default()
}
pub fn get<'map, 'key, Key>(&'map self, id: Key) -> Option<&'map ResponseCookie<'static>>
where
Key: Into<ResponseCookieId<'key>>,
{
self.0.get(id)
}
pub fn insert<C>(&mut self, cookie: C) -> Option<ResponseCookie<'static>>
where
C: Into<ResponseCookie<'static>>,
{
self.0.insert(cookie)
}
pub fn discard<'map, 'key, Key>(&'map mut self, id: Key)
where
Key: Into<ResponseCookieId<'key>>,
{
self.0.discard(id)
}
pub fn iter(&self) -> ResponseCookiesIter {
ResponseCookiesIter {
cookies: self.0.iter(),
}
}
pub fn header_values<'a>(self, processor: &'a Processor) -> impl Iterator<Item = String> + 'a {
self.0.header_values(processor)
}
}
#[cfg(test)]
mod test {
use super::ResponseCookies;
#[test]
#[allow(deprecated)]
fn simple() {
let mut c = ResponseCookies::new();
c.insert(("test", ""));
c.insert(("test2", ""));
c.discard("test");
assert!(c.get("test").is_none());
assert!(c.get("test2").is_some());
c.insert(("test3", ""));
c.discard("test2");
c.discard("test3");
assert!(c.get("test").is_none());
assert!(c.get("test2").is_none());
assert!(c.get("test3").is_none());
}
#[test]
fn set_is_send() {
fn is_send<T: Send>(_: T) -> bool {
true
}
assert!(is_send(ResponseCookies::new()))
}
}