diff --git a/Cargo.lock b/Cargo.lock index 4f9a3b7..0feae1d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -79,6 +79,50 @@ version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04" +[[package]] +name = "askama" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b79091df18a97caea757e28cd2d5fda49c6cd4bd01ddffd7ff01ace0c0ad2c28" +dependencies = [ + "askama_derive", + "askama_escape", + "humansize", + "num-traits", + "percent-encoding", +] + +[[package]] +name = "askama_derive" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19fe8d6cb13c4714962c072ea496f3392015f0989b1a2847bb4b2d9effd71d83" +dependencies = [ + "askama_parser", + "basic-toml", + "mime", + "mime_guess", + "proc-macro2", + "quote", + "serde", + "syn", +] + +[[package]] +name = "askama_escape" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "619743e34b5ba4e9703bba34deac3427c72507c7159f5fd030aea8cac0cfe341" + +[[package]] +name = "askama_parser" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acb1161c6b64d1c3d83108213c2a2533a342ac225aabd0bda218278c2ddb00c0" +dependencies = [ + "nom", +] + [[package]] name = "atoi" version = "2.0.0" @@ -175,6 +219,15 @@ version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" +[[package]] +name = "basic-toml" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "823388e228f614e9558c6804262db37960ec8821856535f5c3f59913140558f8" +dependencies = [ + "serde", +] + [[package]] name = "bitflags" version = "2.8.0" @@ -428,6 +481,7 @@ name = "flake-tracker" version = "0.1.0" dependencies = [ "anyhow", + "askama", "axum", "clap", "serde", @@ -684,6 +738,15 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" +[[package]] +name = "humansize" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6cb51c9a029ddc91b07a787f1d86b53ccfa49b0e86688c946ebe8d3555685dd7" +dependencies = [ + "libm", +] + [[package]] name = "hyper" version = "1.6.0" @@ -968,6 +1031,22 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +[[package]] +name = "mime_guess" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" +dependencies = [ + "mime", + "unicase", +] + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + [[package]] name = "miniz_oxide" version = "0.8.3" @@ -988,6 +1067,16 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + [[package]] name = "num-bigint-dig" version = "0.8.4" @@ -1802,6 +1891,12 @@ version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +[[package]] +name = "unicase" +version = "2.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" + [[package]] name = "unicode-bidi" version = "0.3.18" diff --git a/Cargo.toml b/Cargo.toml index 345c6e5..15d4275 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,6 +5,7 @@ edition = "2021" [dependencies] anyhow = "1.0.95" +askama = { version = "0.12.1"} axum = "0.8.1" clap = { version = "4.5.23", features = ["derive"] } serde = { version = "1.0.217", features = ["derive"] } diff --git a/src/bin/web.rs b/src/bin/web.rs index c375984..93ed8a2 100644 --- a/src/bin/web.rs +++ b/src/bin/web.rs @@ -1,6 +1,7 @@ use anyhow::{ Context, }; +use askama::Template; use axum::{ extract::{ State, @@ -17,6 +18,11 @@ use axum::{ get, }, }; +use flake_tracker::{ + templates::{ + IndexTemplate, + }, +}; use sqlx::{ FromRow, SqlitePool, @@ -63,6 +69,18 @@ impl From for AppError where E: Into { } } +fn render_template(t: &T) -> anyhow::Result { + let body = t.render() + .context("Failed to render template")?; + + Ok(( + [ + ("Content-Type", T::MIME_TYPE), + ], + body, + ).into_response()) +} + #[derive(Clone)] struct AppState { db: SqlitePool, @@ -97,8 +115,8 @@ async fn main() -> anyhow::Result<()> { async fn route_index( State(state): State, -) -> String { - String::from("Hello world") +) -> Result { + Ok(render_template(&IndexTemplate {})?) } async fn route_flakes( diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..b9a1684 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1 @@ +pub mod templates; diff --git a/src/templates.rs b/src/templates.rs new file mode 100644 index 0000000..0e7587b --- /dev/null +++ b/src/templates.rs @@ -0,0 +1,8 @@ +use askama::{ + Template, +}; + +#[derive(Template)] +#[template(path = "index.html")] +pub struct IndexTemplate { +} diff --git a/templates/index.html b/templates/index.html new file mode 100644 index 0000000..980a0d5 --- /dev/null +++ b/templates/index.html @@ -0,0 +1 @@ +Hello World!