diff --git a/crates/service-webpage/Cargo.toml b/crates/service-webpage/Cargo.toml new file mode 100644 index 0000000..d6c1369 --- /dev/null +++ b/crates/service-webpage/Cargo.toml @@ -0,0 +1,20 @@ +[package] +name = "service-webpage" +version = { workspace = true } +rust-version = { workspace = true } +edition = { workspace = true } + +[lints] +workspace = true + +[dependencies] +libservice = { workspace = true } +macro-assets = { workspace = true } +macro-sass = { workspace = true } +assetserver = { workspace = true } + +axum = { workspace = true } +tracing = { workspace = true } +utoipa = { workspace = true } +maud = { workspace = true } +markdown = { workspace = true } diff --git a/crates/service-webpage/assets/fonts/fa/fa-brands-400.ttf b/crates/service-webpage/assets/fonts/fa/fa-brands-400.ttf new file mode 100644 index 0000000..1fbb1f7 Binary files /dev/null and b/crates/service-webpage/assets/fonts/fa/fa-brands-400.ttf differ diff --git a/crates/service-webpage/assets/fonts/fa/fa-brands-400.woff2 b/crates/service-webpage/assets/fonts/fa/fa-brands-400.woff2 new file mode 100644 index 0000000..5d28021 Binary files /dev/null and b/crates/service-webpage/assets/fonts/fa/fa-brands-400.woff2 differ diff --git a/crates/service-webpage/assets/fonts/fa/fa-regular-400.ttf b/crates/service-webpage/assets/fonts/fa/fa-regular-400.ttf new file mode 100644 index 0000000..549d68d Binary files /dev/null and b/crates/service-webpage/assets/fonts/fa/fa-regular-400.ttf differ diff --git a/crates/service-webpage/assets/fonts/fa/fa-regular-400.woff2 b/crates/service-webpage/assets/fonts/fa/fa-regular-400.woff2 new file mode 100644 index 0000000..18400d7 Binary files /dev/null and b/crates/service-webpage/assets/fonts/fa/fa-regular-400.woff2 differ diff --git a/crates/service-webpage/assets/fonts/fa/fa-solid-900.ttf b/crates/service-webpage/assets/fonts/fa/fa-solid-900.ttf new file mode 100644 index 0000000..bb2a869 Binary files /dev/null and b/crates/service-webpage/assets/fonts/fa/fa-solid-900.ttf differ diff --git a/crates/service-webpage/assets/fonts/fa/fa-solid-900.woff2 b/crates/service-webpage/assets/fonts/fa/fa-solid-900.woff2 new file mode 100644 index 0000000..758dd4f Binary files /dev/null and b/crates/service-webpage/assets/fonts/fa/fa-solid-900.woff2 differ diff --git a/crates/service-webpage/assets/fonts/fira/FiraCode-Bold.woff2 b/crates/service-webpage/assets/fonts/fira/FiraCode-Bold.woff2 new file mode 100644 index 0000000..349dc36 Binary files /dev/null and b/crates/service-webpage/assets/fonts/fira/FiraCode-Bold.woff2 differ diff --git a/crates/service-webpage/assets/fonts/fira/FiraCode-Light.woff2 b/crates/service-webpage/assets/fonts/fira/FiraCode-Light.woff2 new file mode 100644 index 0000000..eeaa303 Binary files /dev/null and b/crates/service-webpage/assets/fonts/fira/FiraCode-Light.woff2 differ diff --git a/crates/service-webpage/assets/fonts/fira/FiraCode-Medium.woff2 b/crates/service-webpage/assets/fonts/fira/FiraCode-Medium.woff2 new file mode 100644 index 0000000..7f1d770 Binary files /dev/null and b/crates/service-webpage/assets/fonts/fira/FiraCode-Medium.woff2 differ diff --git a/crates/service-webpage/assets/fonts/fira/FiraCode-Regular.woff2 b/crates/service-webpage/assets/fonts/fira/FiraCode-Regular.woff2 new file mode 100644 index 0000000..f8b63fb Binary files /dev/null and b/crates/service-webpage/assets/fonts/fira/FiraCode-Regular.woff2 differ diff --git a/crates/service-webpage/assets/fonts/fira/FiraCode-SemiBold.woff2 b/crates/service-webpage/assets/fonts/fira/FiraCode-SemiBold.woff2 new file mode 100644 index 0000000..ccbefc8 Binary files /dev/null and b/crates/service-webpage/assets/fonts/fira/FiraCode-SemiBold.woff2 differ diff --git a/crates/service-webpage/assets/fonts/fira/FiraCode-VF.woff2 b/crates/service-webpage/assets/fonts/fira/FiraCode-VF.woff2 new file mode 100644 index 0000000..e755a9d Binary files /dev/null and b/crates/service-webpage/assets/fonts/fira/FiraCode-VF.woff2 differ diff --git a/crates/service-webpage/assets/images/betalupi-map.png b/crates/service-webpage/assets/images/betalupi-map.png new file mode 100644 index 0000000..3d80e23 Binary files /dev/null and b/crates/service-webpage/assets/images/betalupi-map.png differ diff --git a/crates/service-webpage/assets/images/cover-small.jpg b/crates/service-webpage/assets/images/cover-small.jpg new file mode 100644 index 0000000..156336f Binary files /dev/null and b/crates/service-webpage/assets/images/cover-small.jpg differ diff --git a/crates/service-webpage/assets/images/icon.png b/crates/service-webpage/assets/images/icon.png new file mode 100644 index 0000000..5744967 Binary files /dev/null and b/crates/service-webpage/assets/images/icon.png differ diff --git a/crates/service-webpage/src/lib.rs b/crates/service-webpage/src/lib.rs new file mode 100644 index 0000000..65965fe --- /dev/null +++ b/crates/service-webpage/src/lib.rs @@ -0,0 +1,31 @@ +use axum::Router; +use libservice::ToService; +use utoipa::OpenApi; + +mod routes; + +pub struct WebpageService {} + +impl WebpageService { + #[inline] + pub fn new() -> Self { + Self {} + } +} + +impl ToService for WebpageService { + #[inline] + fn make_router(&self) -> Option> { + Some(routes::router()) + } + + #[inline] + fn make_openapi(&self) -> utoipa::openapi::OpenApi { + routes::Api::openapi() + } + + #[inline] + fn service_name(&self) -> Option { + Some("webpage".to_owned()) + } +} diff --git a/crates/service-webpage/src/routes/assets.rs b/crates/service-webpage/src/routes/assets.rs new file mode 100644 index 0000000..14ca3a9 --- /dev/null +++ b/crates/service-webpage/src/routes/assets.rs @@ -0,0 +1,95 @@ +use assetserver::Asset; +use macro_assets::assets; + +// TODO: auto-generate from dir +assets! { + prefix: "/assets" + router: asset_router() + + // + // MARK: images + // + + Image_Cover { + source: "../../assets/images/cover-small.jpg", + target: "/img/face.jpg" + } + + Image_Betalupi { + source: "../../assets/images/betalupi-map.png", + target: "/img/betalupi.png" + } + + Image_Icon { + source: "../../assets/images/icon.png", + target: "/img/icon.png" + } + + // + // MARK:fonts + // + + FiraCode_Bold_woff2 { + source: "../../assets/fonts/fira/FiraCode-Bold.woff2", + target: "/fonts/FiraCode-Bold.woff2" + } + + FiraCode_Light_woff2 { + source: "../../assets/fonts/fira/FiraCode-Light.woff2", + target: "/fonts/FiraCode-Light.woff2" + } + + FiraCode_Medium_woff2 { + source: "../../assets/fonts/fira/FiraCode-Medium.woff2", + target: "/fonts/FiraCode-Medium.woff2" + } + + FiraCode_Regular_woff2 { + source: "../../assets/fonts/fira/FiraCode-Regular.woff2", + target: "/fonts/FiraCode-Regular.woff2" + } + + FiraCode_SemiBold_woff2 { + source: "../../assets/fonts/fira/FiraCode-SemiBold.woff2", + target: "/fonts/FiraCode-SemiBold.woff2" + } + + FiraCode_VF_woff2 { + source: "../../assets/fonts/fira/FiraCode-VF.woff2", + target: "/fonts/FiraCode-VF.woff2" + } + + // + // MARK: icons + // + + Fa_Brands_woff2 { + source: "../../assets/fonts/fa/fa-brands-400.woff2", + target: "/fonts/fa/fa-brands-400.woff2" + } + + Fa_Regular_woff2 { + source: "../../assets/fonts/fa/fa-regular-400.woff2", + target: "/fonts/fa/fa-regular-400.woff2" + } + + Fa_Solid_woff2 { + source: "../../assets/fonts/fa/fa-solid-900.woff2", + target: "/fonts/fa/fa-solid-900.woff2" + } + + Fa_Brands_ttf { + source: "../../assets/fonts/fa/fa-brands-400.ttf", + target: "/fonts/fa/fa-brands-400.ttf" + } + + Fa_Regular_ttf { + source: "../../assets/fonts/fa/fa-regular-400.ttf", + target: "/fonts/fa/fa-regular-400.ttf" + } + + Fa_Solid_ttf { + source: "../../assets/fonts/fa/fa-solid-900.ttf", + target: "/fonts/fa/fa-solid-900.ttf" + } +} diff --git a/crates/service-webpage/src/routes/mod.rs b/crates/service-webpage/src/routes/mod.rs new file mode 100644 index 0000000..12ecddf --- /dev/null +++ b/crates/service-webpage/src/routes/mod.rs @@ -0,0 +1,16 @@ +use axum::Router; +use tracing::info; +use utoipa::OpenApi; + +mod assets; + +#[derive(OpenApi)] +#[openapi(tags(), paths(), components(schemas()))] +pub(super) struct Api; + +pub(super) fn router() -> Router<()> { + let (asset_prefix, asset_router) = assets::asset_router(); + info!("Serving assets at {asset_prefix}"); + + Router::new().nest(asset_prefix, asset_router) +}