From fe620456671cf52c741309b3bdcf7460e1973476 Mon Sep 17 00:00:00 2001 From: René Kijewski Date: Wed, 5 Jan 2022 19:35:53 +0100 Subject: No needless boxing of the error --- askama_actix/src/lib.rs | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/askama_actix/src/lib.rs b/askama_actix/src/lib.rs index afc3ea3..7ecf591 100644 --- a/askama_actix/src/lib.rs +++ b/askama_actix/src/lib.rs @@ -1,11 +1,32 @@ #![deny(elided_lifetimes_in_paths)] +use std::fmt; + use actix_web::body::BoxBody; use actix_web::http::StatusCode; use actix_web::{HttpResponse, HttpResponseBuilder, ResponseError}; use askama::mime::extension_to_mime_type; pub use askama::*; +/// Newtype to let askama::Error implement actix_web::ResponseError. +struct ActixError(Error); + +impl fmt::Debug for ActixError { + #[inline] + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + ::fmt(&self.0, f) + } +} + +impl fmt::Display for ActixError { + #[inline] + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + ::fmt(&self.0, f) + } +} + +impl ResponseError for ActixError {} + pub trait TemplateToResponse { fn to_response(&self) -> HttpResponse; } @@ -19,9 +40,7 @@ impl TemplateToResponse for T { .content_type(ctype) .body(buffer) } - Err(err) => { - HttpResponse::from_error(Box::new(err) as Box) - } + Err(err) => HttpResponse::from_error(ActixError(err)), } } } -- cgit