axum_template/engine/
handlebars.rs

1use crate::TemplateEngine;
2
3use super::Engine;
4
5use axum::{http::StatusCode, response::IntoResponse};
6use handlebars::Handlebars;
7use thiserror::Error;
8
9impl TemplateEngine for Engine<Handlebars<'static>> {
10    type Error = HandlebarsError;
11
12    fn render<D: serde::Serialize>(&self, key: &str, data: D) -> Result<String, Self::Error> {
13        let rendered = self.engine.render(key, &data)?;
14
15        Ok(rendered)
16    }
17}
18
19/// Error wrapper for [`handlebars::RenderError`]
20#[derive(Error, Debug)]
21pub enum HandlebarsError {
22    /// See [`handlebars::RenderError`]
23    #[error(transparent)]
24    RenderError(#[from] handlebars::RenderError),
25}
26
27impl IntoResponse for HandlebarsError {
28    fn into_response(self) -> axum::response::Response {
29        (StatusCode::INTERNAL_SERVER_ERROR, self.to_string()).into_response()
30    }
31}