bobashare_web/views/
about.rs1use 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#[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}