diff options
Diffstat (limited to 'server')
-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())) } |