standard_error/extras/fromerrs/
axum.rs1use crate::{Interpolate, StandardError};
2use axum::http::{Error as HttpError, StatusCode};
3use std::error::Error as StdError;
4
5impl From<axum::Error> for StandardError {
6 fn from(error: axum::Error) -> Self {
7 log::error!("axum error: {}", &error.to_string());
8
9 if let Some(io_err) = error
10 .source()
11 .and_then(|e| e.downcast_ref::<std::io::Error>())
12 {
13 StandardError::new("ER-AXUM-IO")
14 .interpolate_err(format!("IO error occurred: {}", io_err))
15 } else if let Some(hyper_err) = error
16 .source()
17 .and_then(|e| e.downcast_ref::<hyper::Error>())
18 {
19 StandardError::new("ER-AXUM-HYPER")
20 .interpolate_err(format!("Hyper error occurred: {}", hyper_err))
21 } else if let Some(http_err) = error.source().and_then(|e| e.downcast_ref::<HttpError>()) {
22 StandardError::new("ER-AXUM-HTTP")
23 .interpolate_err(format!("HTTP error occurred: {}", http_err))
24 } else {
25 StandardError::new("ER-AXUM-UNKNOWN")
26 .interpolate_err("An unknown Axum error occurred".to_string())
27 }
28 }
29}
30
31impl From<axum::http::StatusCode> for StandardError {
32 fn from(status: StatusCode) -> Self {
33 log::error!("HTTP error: {}", status.as_u16());
34
35 match status {
36 StatusCode::NOT_FOUND => StandardError::new("ER-AXUM-NOTFOUND")
37 .interpolate_err("Resource not found".to_string()),
38 StatusCode::INTERNAL_SERVER_ERROR => StandardError::new("ER-AXUM-INTERNAL")
39 .interpolate_err("Internal server error".to_string()),
40 StatusCode::BAD_REQUEST => {
41 StandardError::new("ER-AXUM-BADREQUEST").interpolate_err("Bad request".to_string())
42 }
43 StatusCode::FORBIDDEN => StandardError::new("ER-AXUM-FORBIDDEN")
44 .interpolate_err("Forbidden request".to_string()),
45 StatusCode::UNAUTHORIZED => StandardError::new("ER-AXUM-UNAUTHORIZED")
46 .interpolate_err("Unauthorized request".to_string()),
47 _ => StandardError::new("ER-AXUM-UNKNOWN")
48 .interpolate_err(format!("Unknown error: {}", status)),
49 }
50 }
51}
52
53impl From<axum::http::header::InvalidHeaderValue> for StandardError {
54 fn from(error: axum::http::header::InvalidHeaderValue) -> Self {
55 log::error!("Invalid header value error: {}", &error.to_string());
56 StandardError::new("ER-AXUM-INVALIDHEADERVALUE")
57 .interpolate_err("Invalid header value".to_string())
58 }
59}
60
61impl From<axum::http::header::InvalidHeaderName> for StandardError {
62 fn from(error: axum::http::header::InvalidHeaderName) -> Self {
63 log::error!("Invalid header name error: {}", &error.to_string());
64 StandardError::new("ER-AXUM-INVALIDHEADERNAME")
65 .interpolate_err("Invalid header name".to_string())
66 }
67}
68
69impl From<axum::http::Error> for StandardError {
70 fn from(error: axum::http::Error) -> Self {
71 log::error!("HTTP error: {}", &error.to_string());
72 StandardError::new("ER-AXUM-HTTPERROR").interpolate_err("General HTTP error".to_string())
73 }
74}