use askama::Template; use axum::{ http::StatusCode, response::{Html, IntoResponse, Response}, }; pub mod root; pub mod blog; pub mod projects; pub mod api; /// A wrapper type that we'll use to encapsulate HTML parsed by askama into valid HTML for axum to serve. pub struct HtmlTemplate(pub T); /// Allows us to convert Askama HTML templates into valid HTML for axum to serve in the response. impl IntoResponse for HtmlTemplate where T: Template, { fn into_response(self) -> Response { // Attempt to render the template with askama match self.0.render() { // If we're able to successfully parse and aggregate the template, serve it Ok(html) => Html(html).into_response(), // If we're not, return an error or some bit of fallback HTML Err(err) => ( StatusCode::INTERNAL_SERVER_ERROR, format!("Failed to render template. Error: {}", err), ) .into_response(), } } }