worker-route 0.0.3

Route handlers an data extractor for Cloudflare Workers.
Documentation
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,
        }
    }
}