diff --git a/web/src/main.rs b/web/src/main.rs index 3099108..63c3d53 100644 --- a/web/src/main.rs +++ b/web/src/main.rs @@ -3,6 +3,7 @@ pub mod contrast; pub mod statics; pub mod configuration; +use crate::statics::StaticAsset; use smol::io::AsyncWriteExt; use smol::stream::StreamExt; use std::borrow::Cow; @@ -195,7 +196,11 @@ fn route_request(req: &ScgiRequest) -> Route { #[cfg(feature = "embed_static_assets")] // If the route is /static/, check to see if it matches an asset first if segments.get(0).map(Deref::deref) == Some("static") { - // TODO try serve static files + for asset in statics::STATIC_ASSETS { + if Some(asset.filename) == segments.get(1).map(Deref::deref) { + return Route::SendStatic(asset); + } + } } // Determines if we need to respond with a thumbnail or a web page @@ -258,7 +263,7 @@ enum Route { /// Respond to the request with one of the static files embeded in the application /// /// The wrapped pointer is a pointer to those bytes in memory. - SendStatic(&'static [u8]), + SendStatic(&'static StaticAsset), /// Respond with an HTML pronoun page. /// @@ -301,12 +306,7 @@ impl Route { /// Actually perform the action that each route entails fn generate_response(self, settings: &InstanceSettings) -> Response { let result = match self { - Route::SendStatic(data) => Ok(Response { - status: 200, - headers: Cow::Borrowed(&[ - ]), - body: data.into(), - }), + Route::SendStatic(data) => Ok(data.generate_response()), Route::SendPronounPage(name, prefs) => Route::send_pronoun_page(name, prefs, settings), Route::SendThumbnail(name, prefs) => diff --git a/web/src/statics.rs b/web/src/statics.rs index 39b2ddb..98f4877 100644 --- a/web/src/statics.rs +++ b/web/src/statics.rs @@ -28,7 +28,7 @@ impl StaticAsset { /// Generate the HTTP response for sending this asset to the client // I wrote all this code to make this a const fn, and then don't even use it in // compile-time :( - const fn generate_response(&self) -> Response { + pub const fn generate_response(&self) -> Response { Response { status: 200, headers: Cow::Borrowed(StaticAsset::STATIC_HEADERS), @@ -54,7 +54,7 @@ macro_rules! static_asset { pub const FONT: StaticAsset = static_asset!("font.otf"); /// A list of static assets which should be served by the server -pub const STATIC_ASSETS: &[StaticAsset] = &[ +pub const STATIC_ASSETS: &[&StaticAsset] = &[ #[cfg(any(feature = "embed_static_assets"))] - FONT, + &FONT, ];