worker_route/http/
cookies.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
use super::{
    header::{HeaderName, HeaderValue, COOKIE, SET_COOKIE},
    headers::HeadersOp,
    response::ResponseBuilder,
    HttpHeaders,
};

#[derive(Clone, Copy)]
pub enum CookieHelper {
    Set,
    Get,
}

impl CookieHelper {
    pub fn get(&self, headers: &HttpHeaders) -> impl Iterator<Item = cookie::Cookie<'_>> {
        headers
            .entries()
            .filter(|(k, _)| k == self.header_name().as_str())
            .flat_map(|(_, v)| cookie::Cookie::parse(v))
    }

    pub fn set(&self, builder: &mut ResponseBuilder, cookie: &cookie::Cookie<'_>) {
        HeadersOp::Append.set(
            &(
                self.header_name(),
                HeaderValue::from_str(&cookie.to_string()).unwrap(),
            ),
            builder,
        );
    }

    fn header_name(&self) -> HeaderName {
        match self {
            CookieHelper::Set => SET_COOKIE,
            CookieHelper::Get => COOKIE,
        }
    }
}