repos

blog.bythewood.me-rust

mirror archived upstream

Single-binary self-hosted Markdown blog on Rust axum: no database, live search, Typst PDF export, and strong SEO.

axumblogdockermarkdownminijinjarustself-hostedtypstvite

679 B · 23 lines · Rust Raw History
 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}