Skip to main content

actix_state_guards/
errors.rs

1use std::fmt::Display;
2
3use actix_web::{Error as ActixWebError, ResponseError};
4
5pub type GuardResult<GuardCallErr> = Result<(), GuardError<GuardCallErr>>;
6
7#[derive(Debug)]
8pub enum GuardError<GuardCallErr> {
9    FromRequest(ActixWebError),
10    GuardCall(GuardCallErr),
11}
12
13impl<GuardCallErr> Display for GuardError<GuardCallErr>
14where
15    GuardCallErr: Display,
16{
17    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
18        match self {
19            GuardError::FromRequest(from_request_error) => from_request_error.fmt(f),
20            GuardError::GuardCall(guard_call_error) => guard_call_error.fmt(f),
21        }
22    }
23}
24
25impl<GuardCallErr> ResponseError for GuardError<GuardCallErr>
26where
27    GuardCallErr: ResponseError,
28{
29    fn status_code(&self) -> actix_web::http::StatusCode {
30        match self {
31            GuardError::FromRequest(from_request_error) => from_request_error.as_response_error().status_code(),
32            GuardError::GuardCall(guard_call_error) => guard_call_error.status_code(),
33        }
34    }
35
36    fn error_response(&self) -> actix_web::HttpResponse<actix_web::body::BoxBody> {
37        match self {
38            GuardError::FromRequest(from_request_error) => from_request_error.error_response(),
39            GuardError::GuardCall(guard_call_error) => guard_call_error.error_response(),
40        }
41    }
42}