Krys4lide/crates/app/src/lib.rs

33 lines
802 B
Rust

use std::path::Path;
use askama_axum::Template;
use axum::http::{StatusCode, Uri};
use axum_htmx::{AutoVaryLayer, HxRequest};
use tower_http::services::ServeDir;
mod menu;
mod pages;
async fn fallback(uri: Uri) -> (StatusCode, String) {
(StatusCode::NOT_FOUND, format!("No route for {uri}"))
}
#[derive(Template)]
#[template(path = "index.html")]
pub struct GetIndexTemplate {
hx_request: bool,
}
async fn root(HxRequest(hx_request): HxRequest) -> GetIndexTemplate {
GetIndexTemplate { hx_request }
}
pub fn get_router(assets_path: &Path) -> axum::Router {
axum::Router::new()
.nest_service("/assets", ServeDir::new(assets_path))
.route("/", axum::routing::get(root))
.merge(pages::get_routes())
.fallback(fallback)
.layer(AutoVaryLayer)
}