diff options
Diffstat (limited to 'templates')
-rw-r--r-- | templates/src/assets.rs | 47 | ||||
-rw-r--r-- | templates/src/lib.rs | 54 |
2 files changed, 48 insertions, 53 deletions
diff --git a/templates/src/assets.rs b/templates/src/assets.rs new file mode 100644 index 0000000..493c14d --- /dev/null +++ b/templates/src/assets.rs @@ -0,0 +1,47 @@ +use axum::extract::Path; +use axum::http::header::{CACHE_CONTROL, CONTENT_ENCODING, CONTENT_TYPE, X_CONTENT_TYPE_OPTIONS}; +use axum::http::StatusCode; +use axum::response::{IntoResponse, Response}; + +const ASSETS: include_dir::Dir<'static> = include_dir::include_dir!("$OUT_DIR/"); +const CACHE_FOR_A_DAY: &str = "max-age=86400"; +const GZIP: &str = "gzip"; + +pub async fn statics(Path(path): Path<String>) -> Response { + let content_type: &'static str = if path.ends_with(".js") { + "application/javascript" + } else if path.ends_with(".css") { + "text/css" + } else if path.ends_with(".html") { + "text/html; charset=\"utf-8\"" + } else { + "application/octet-stream" + }; + + match ASSETS.get_file(path.clone() + ".gz") { + Some(file) => ( + StatusCode::OK, + [ + (CONTENT_TYPE, content_type), + (CONTENT_ENCODING, GZIP), + (CACHE_CONTROL, CACHE_FOR_A_DAY), + (X_CONTENT_TYPE_OPTIONS, "nosniff"), + ], + file.contents(), + ) + .into_response(), + None => match ASSETS.get_file(path) { + Some(file) => ( + StatusCode::OK, + [ + (CONTENT_TYPE, content_type), + (CACHE_CONTROL, CACHE_FOR_A_DAY), + (X_CONTENT_TYPE_OPTIONS, "nosniff"), + ], + file.contents(), + ) + .into_response(), + None => StatusCode::NOT_FOUND.into_response(), + }, + } +} diff --git a/templates/src/lib.rs b/templates/src/lib.rs index fde0dab..0f9f7c6 100644 --- a/templates/src/lib.rs +++ b/templates/src/lib.rs @@ -8,60 +8,8 @@ mod login; pub use login::{LoginPage, LogoutPage}; mod mf2; pub use mf2::{Entry, Feed, Food, VCard, POSTS_PER_PAGE}; - pub mod admin; - -pub mod assets { - use axum::extract::Path; - use axum::http::header::{ - CACHE_CONTROL, CONTENT_ENCODING, CONTENT_TYPE, X_CONTENT_TYPE_OPTIONS, - }; - use axum::http::StatusCode; - use axum::response::{IntoResponse, Response}; - - const ASSETS: include_dir::Dir<'static> = include_dir::include_dir!("$OUT_DIR/"); - const CACHE_FOR_A_DAY: &str = "max-age=86400"; - const GZIP: &str = "gzip"; - - pub async fn statics(Path(path): Path<String>) -> Response { - let content_type: &'static str = if path.ends_with(".js") { - "application/javascript" - } else if path.ends_with(".css") { - "text/css" - } else if path.ends_with(".html") { - "text/html; charset=\"utf-8\"" - } else { - "application/octet-stream" - }; - - match ASSETS.get_file(path.clone() + ".gz") { - Some(file) => ( - StatusCode::OK, - [ - (CONTENT_TYPE, content_type), - (CONTENT_ENCODING, GZIP), - (CACHE_CONTROL, CACHE_FOR_A_DAY), - (X_CONTENT_TYPE_OPTIONS, "nosniff"), - ], - file.contents(), - ) - .into_response(), - None => match ASSETS.get_file(path) { - Some(file) => ( - StatusCode::OK, - [ - (CONTENT_TYPE, content_type), - (CACHE_CONTROL, CACHE_FOR_A_DAY), - (X_CONTENT_TYPE_OPTIONS, "nosniff"), - ], - file.contents(), - ) - .into_response(), - None => StatusCode::NOT_FOUND.into_response(), - }, - } - } -} +pub mod assets; #[cfg(test)] mod tests { |