generated from alecodes/base-template
feat: add basic template functionality
This commit is contained in:
parent
b6c909f6f4
commit
6bf3947df3
5 changed files with 52 additions and 3 deletions
|
|
@ -10,7 +10,7 @@ docker-compose +ARGS:
|
||||||
start-dev-services: (docker-compose "up --remove-orphans")
|
start-dev-services: (docker-compose "up --remove-orphans")
|
||||||
|
|
||||||
dev:
|
dev:
|
||||||
watchexec --restart --clear --watch src cargo run
|
watchexec --restart --clear --watch src --watch templates cargo run
|
||||||
|
|
||||||
migrate: (docker-compose "run dbmate migrate")
|
migrate: (docker-compose "run dbmate migrate")
|
||||||
|
|
||||||
|
|
|
||||||
13
Cargo.lock
generated
13
Cargo.lock
generated
|
|
@ -115,7 +115,9 @@ name = "compendium"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"axum",
|
"axum",
|
||||||
|
"minijinja",
|
||||||
"notify",
|
"notify",
|
||||||
|
"serde",
|
||||||
"tokio",
|
"tokio",
|
||||||
"tower-livereload",
|
"tower-livereload",
|
||||||
]
|
]
|
||||||
|
|
@ -363,6 +365,15 @@ version = "0.3.17"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
|
checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "minijinja"
|
||||||
|
version = "2.7.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "cff7b8df5e85e30b87c2b0b3f58ba3a87b68e133738bf512a7713769326dbca9"
|
||||||
|
dependencies = [
|
||||||
|
"serde",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "miniz_oxide"
|
name = "miniz_oxide"
|
||||||
version = "0.8.4"
|
version = "0.8.4"
|
||||||
|
|
@ -699,7 +710,7 @@ version = "0.1.9"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
|
checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"windows-sys 0.52.0",
|
"windows-sys 0.59.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,8 @@ edition = "2021"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
axum = "0.8.1"
|
axum = "0.8.1"
|
||||||
|
minijinja = "2.7.0"
|
||||||
notify = "8.0.0"
|
notify = "8.0.0"
|
||||||
|
serde = "1.0.217"
|
||||||
tokio = { version = "1.43.0", features = ["macros", "rt-multi-thread"] }
|
tokio = { version = "1.43.0", features = ["macros", "rt-multi-thread"] }
|
||||||
tower-livereload = "0.9.6"
|
tower-livereload = "0.9.6"
|
||||||
|
|
|
||||||
28
src/main.rs
28
src/main.rs
|
|
@ -1,10 +1,28 @@
|
||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
use axum::extract::State;
|
||||||
|
use axum::http::StatusCode;
|
||||||
use axum::response::Html;
|
use axum::response::Html;
|
||||||
use axum::routing::get;
|
use axum::routing::get;
|
||||||
use axum::Router;
|
use axum::Router;
|
||||||
|
use minijinja::{context, Environment};
|
||||||
|
|
||||||
|
struct AppState {
|
||||||
|
tmpl_env: Environment<'static>,
|
||||||
|
}
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() {
|
async fn main() {
|
||||||
let app = Router::new().route("/", get(|| async { Html("<h1>Hello, World! 2</h1>") }));
|
let mut tmpl_env = Environment::new();
|
||||||
|
tmpl_env
|
||||||
|
.add_template("base", include_str!("../templates/base.html"))
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
let app_state = Arc::new(AppState { tmpl_env });
|
||||||
|
|
||||||
|
let app = Router::new()
|
||||||
|
.route("/", get(handler_home))
|
||||||
|
.with_state(app_state);
|
||||||
|
|
||||||
// Add hot reload only on dev mode
|
// Add hot reload only on dev mode
|
||||||
#[cfg(debug_assertions)]
|
#[cfg(debug_assertions)]
|
||||||
|
|
@ -13,3 +31,11 @@ async fn main() {
|
||||||
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
|
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
|
||||||
axum::serve(listener, app).await.unwrap();
|
axum::serve(listener, app).await.unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async fn handler_home(State(state): State<Arc<AppState>>) -> Result<Html<String>, StatusCode> {
|
||||||
|
let template = state.tmpl_env.get_template("base").unwrap();
|
||||||
|
|
||||||
|
let content = template.render(context!()).unwrap();
|
||||||
|
|
||||||
|
Ok(Html(content))
|
||||||
|
}
|
||||||
|
|
|
||||||
10
templates/base.html
Normal file
10
templates/base.html
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Compendium</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>Hello world!</h1>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
Loading…
Add table
Add a link
Reference in a new issue