32 lines
921 B
Rust
32 lines
921 B
Rust
|
use crate::{prelude::*, state::State as AppState, static_files};
|
||
|
use axum::{extract::State, response::Html, routing::get, Router};
|
||
|
use minijinja::context;
|
||
|
use tower_livereload::LiveReloadLayer;
|
||
|
|
||
|
pub async fn router() -> Result<Router> {
|
||
|
let state = AppState::try_new().await?;
|
||
|
|
||
|
let lr = LiveReloadLayer::new();
|
||
|
let _template_file_watcher = state
|
||
|
.clone()
|
||
|
.templates
|
||
|
.start_watcher(Some(lr.reloader()))
|
||
|
.await?;
|
||
|
let (static_file_service, _static_file_watcher) = static_files::router(Some(lr.reloader()))?;
|
||
|
|
||
|
Ok(Router::new()
|
||
|
.route("/", get(index))
|
||
|
.nest_service("/static", static_file_service)
|
||
|
.layer(lr)
|
||
|
.with_state(state))
|
||
|
}
|
||
|
|
||
|
async fn index(State(state): State<AppState>) -> Result<Html<String>> {
|
||
|
Ok(Html(
|
||
|
state
|
||
|
.templates
|
||
|
.render("pages/index.html.jinja", context!())
|
||
|
.await?,
|
||
|
))
|
||
|
}
|