actix_state_guards/
errors.rs1use 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}