Bootstrap template engine

This commit is contained in:
clerie 2025-02-01 14:22:33 +01:00
parent e707abbd65
commit b2ea0c311d
6 changed files with 126 additions and 2 deletions

95
Cargo.lock generated
View File

@ -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"

View File

@ -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"] }

View File

@ -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<E> From<E> for AppError where E: Into<anyhow::Error> {
}
}
fn render_template<T: Template>(t: &T) -> anyhow::Result<Response> {
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<AppState>,
) -> String {
String::from("Hello world")
) -> Result<impl IntoResponse, AppError> {
Ok(render_template(&IndexTemplate {})?)
}
async fn route_flakes(

1
src/lib.rs Normal file
View File

@ -0,0 +1 @@
pub mod templates;

8
src/templates.rs Normal file
View File

@ -0,0 +1,8 @@
use askama::{
Template,
};
#[derive(Template)]
#[template(path = "index.html")]
pub struct IndexTemplate {
}

1
templates/index.html Normal file
View File

@ -0,0 +1 @@
Hello World!