use std::sync::Arc; use axum::{extract::Path, response::Html, Extension}; use tracing::log::*; use super::{Error, Result}; use crate::{post::render_post, State}; pub async fn view(Path(path): Path, Extension(state): Extension>) -> Result { info!("Requested post: {}", path); let post = state .posts .iter() .find(|p| p.slug.eq_ignore_ascii_case(&path)) .ok_or(Error::NotFound)?; //let post = load_post(&path).await.ok_or(Error::NotFound)?; let res = render_post(&state, post).await.ok_or(Error::NotFound)?; Ok(Html(res.into())) } pub async fn index(Extension(state): Extension>) -> Result { let mut ctx = tera::Context::new(); ctx.insert("posts", &state.posts); let res = state.tera.render("postsindex.html", &ctx).map_err(|e| { error!("Failed rendering posts index: {:?}", e); Error::NotFound })?; Ok(Html(res.into())) }