An open API service indexing awesome lists of open source software.

https://github.com/michaelvanstraten/actix-error-mapper-middleware

Remap actix-web errors to your own custom error type
https://github.com/michaelvanstraten/actix-error-mapper-middleware

actix actix-web actix-web-middleware error-handling rust

Last synced: 2 months ago
JSON representation

Remap actix-web errors to your own custom error type

Awesome Lists containing this project

README

        

# Actix-error-mapper-middleware

This simple crate allows you to remap actix-web errors to your own custom error type. You could for example return a html wrapped error.

## Example

Your custom error trait has to implement the
```std::convert::From``` and the ```actix_web::ResponseError``` traits.

```rust
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, HTMLify};

#[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()}





))
}
}
```