diff options
Diffstat (limited to '')
| -rw-r--r-- | askama_actix/src/lib.rs | 25 | 
1 files 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 { +        <Error as fmt::Debug>::fmt(&self.0, f) +    } +} + +impl fmt::Display for ActixError { +    #[inline] +    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { +        <Error as fmt::Display>::fmt(&self.0, f) +    } +} + +impl ResponseError for ActixError {} +  pub trait TemplateToResponse {      fn to_response(&self) -> HttpResponse<BoxBody>;  } @@ -19,9 +40,7 @@ impl<T: askama::Template> TemplateToResponse for T {                      .content_type(ctype)                      .body(buffer)              } -            Err(err) => { -                HttpResponse::from_error(Box::new(err) as Box<dyn std::error::Error + 'static>) -            } +            Err(err) => HttpResponse::from_error(ActixError(err)),          }      }  } | 
