bobashare_web/views/
about.rs

1use askama::Template;
2use axum::{extract::State, response::IntoResponse};
3use hyper::StatusCode;
4use tracing::instrument;
5
6use super::{
7    filters, render_template, CurrentNavigation, ErrorResponse, ErrorTemplate, TemplateState,
8};
9use crate::AppState;
10
11#[derive(Template)]
12#[template(path = "about.html.jinja")]
13pub struct AboutTemplate<'s, 'c> {
14    pub state: TemplateState<'s>,
15    pub about_content_rendered: &'c str,
16}
17
18/// Display a simple about page
19#[instrument(skip(state))]
20pub async fn about(
21    State(state): State<&'static AppState>,
22) -> Result<impl IntoResponse, ErrorResponse> {
23    let mut tmpl_state = TemplateState::from(state);
24
25    if state.about_page.is_none() {
26        Err(ErrorTemplate {
27            state: tmpl_state.clone(),
28            code: StatusCode::NOT_FOUND,
29            message: "no about page is configured".to_string(),
30        })?;
31    }
32
33    tmpl_state.current_navigation = Some(CurrentNavigation::About);
34
35    render_template(AboutTemplate {
36        state: tmpl_state,
37        about_content_rendered: &state.about_page_content,
38    })
39}