Single-binary self-hosted Markdown blog on Rust axum: no database, live search, Typst PDF export, and strong SEO.
axumblogdockermarkdownminijinjarustself-hostedtypstvite
1use axum::{
2 extract::State,
3 http::{HeaderMap, StatusCode, Uri},
4 response::{IntoResponse, Response},
5};
6use minijinja::context;
7
8use crate::app::AppState;
9use crate::render::{build_request, render_html};
10
11pub async fn not_found(
12 State(state): State<AppState>,
13 uri: Uri,
14 headers: HeaderMap,
15) -> Response {
16 let request = build_request(&uri, &headers);
17 let page = context! { title => "404", description => "Page not found" };
18 match render_html(&state, "404.html", context! { page }, &request) {
19 Ok(html) => (StatusCode::NOT_FOUND, html).into_response(),
20 Err(_) => (StatusCode::NOT_FOUND, "404 Not Found").into_response(),
21 }
22}