use actix_error_mapper_middleware::MapperService; use actix_jwt_auth_middleware::{AuthService, Authority}; use actix_web::{web, App, Error as ActixError, HttpResponse, HttpServer, ResponseError}; use rusty_html::html; #[actix_web::main] async fn main() -> std::io::Result<()> { HttpServer::new(move || { App::new() // this wrap will catch every error thrown in the Apps scope an convert it to the MyError type .wrap(MapperService::::new()) .service( web::scope("") // this service will throw an error if you are not logged in .wrap(AuthService::new(Authority::::default())), ) }) .bind("127.0.0.1:8080")? .run() .await } #[derive(Debug)] struct MyError { error: ActixError, } impl std::convert::From for MyError { fn from(error: ActixError) -> Self { Self { error } } } impl std::fmt::Display for MyError { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { f.write_fmt(format_args!( "An error occurred: \"{}\"", self.error.to_string() )) } } impl ResponseError for MyError { fn status_code(&self) -> actix_web::http::StatusCode { self.error.as_response_error().status_code() } fn error_response(&self) -> actix_web::HttpResponse { HttpResponse::build(self.status_code()).body(html!( Error

Ups . . .

{self.to_string()}

)) } }