diff options
Diffstat (limited to 'server/src/routes')
| -rw-r--r-- | server/src/routes/ui/style.rs | 35 | 
1 files changed, 25 insertions, 10 deletions
| diff --git a/server/src/routes/ui/style.rs b/server/src/routes/ui/style.rs index b8a5fdb..bdaddd2 100644 --- a/server/src/routes/ui/style.rs +++ b/server/src/routes/ui/style.rs @@ -4,7 +4,11 @@      Copyright (C) 2023 metamuffin <metamuffin.org>      Copyright (C) 2023 tpart  */ -use rocket::{get, http::ContentType}; +use rocket::{ +    get, +    http::{ContentType, Header}, +    response::Responder, +};  macro_rules! concat_files {      ([$base: expr], $($files:literal),*) => {{ @@ -42,6 +46,17 @@ fn css_bundle() -> String {      )  } +pub struct CachedAsset<T>(pub T); +impl<'r, 'o: 'r, T: Responder<'r, 'o>> Responder<'r, 'o> for CachedAsset<T> { +    fn respond_to(self, request: &'r rocket::Request<'_>) -> rocket::response::Result<'o> { +        let mut res = self.0.respond_to(request)?; +        if cfg!(not(debug_assertions)) { +            res.set_header(Header::new("cache-control", "max-age=86400")); +        } +        Ok(res) +    } +} +  fn js_bundle() -> String {      concat_files!([env!("OUT_DIR")], "bundle.js")  } @@ -50,23 +65,23 @@ fn js_bundle_map() -> String {  }  #[get("/assets/style.css")] -pub fn r_assets_style() -> (ContentType, String) { -    (ContentType::CSS, css_bundle()) +pub fn r_assets_style() -> CachedAsset<(ContentType, String)> { +    CachedAsset((ContentType::CSS, css_bundle()))  }  #[get("/assets/cantarell.woff2")] -pub fn r_assets_font() -> (ContentType, &'static [u8]) { -    ( +pub fn r_assets_font() -> CachedAsset<(ContentType, &'static [u8])> { +    CachedAsset((          ContentType::WOFF2,          include_bytes!("../../../../web/cantarell.woff2"), -    ) +    ))  }  #[get("/assets/bundle.js")] -pub fn r_assets_js() -> (ContentType, String) { -    (ContentType::JavaScript, js_bundle()) +pub fn r_assets_js() -> CachedAsset<(ContentType, String)> { +    CachedAsset((ContentType::JavaScript, js_bundle()))  }  #[get("/assets/bundle.js.map")] -pub fn r_assets_js_map() -> (ContentType, String) { -    (ContentType::JSON, js_bundle_map()) +pub fn r_assets_js_map() -> CachedAsset<(ContentType, String)> { +    CachedAsset((ContentType::JSON, js_bundle_map()))  } | 
