use chrono::{Days, Utc}; #[derive(Copy, Clone)] pub enum Expiry { Instant, Year, } impl Expiry { pub fn header_value(self) -> Option<String> { let date = match self { Expiry::Instant => return None, Expiry::Year => Utc::now() + Days::new(365), }; Some(date.format("%a, %d %b %Y %T GMT").to_string()) } } #[derive(Clone)] pub struct Response { pub content_type: &'static str, pub expiry: Expiry, pub data: Vec<u8>, } impl Response { pub fn html(html: String) -> Self { Self { content_type: "text/html; charset=utf-8", expiry: Expiry::Instant, data: html.into_bytes(), } } pub fn css(css: String) -> Self { Self { content_type: "text/css; charset=utf-8", expiry: Expiry::Year, data: css.into_bytes(), } } pub fn png(data: Vec<u8>) -> Self { Self { content_type: "image/png", expiry: Expiry::Year, data, } } pub fn ico(data: Vec<u8>) -> Self { Self { content_type: "image/x-icon", expiry: Expiry::Year, data, } } }