diff options
Diffstat (limited to 'src/error.rs')
-rw-r--r-- | src/error.rs | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/src/error.rs b/src/error.rs index c7290af..a518bfb 100644 --- a/src/error.rs +++ b/src/error.rs @@ -8,7 +8,7 @@ pub enum ServiceError { Limit(#[from] tokio::sync::TryAcquireError), #[error("hyper error")] Hyper(hyper::Error), - #[error("no host")] + #[error("host header missing")] NoHost, #[error("unknown host")] UnknownHost, @@ -49,3 +49,35 @@ pub enum ServiceError { #[error("impossible error")] Other, } + +impl ServiceError { + pub fn status_code(&self) -> http::StatusCode { + use http::StatusCode; + match self { + ServiceError::NoResponse => todo!(), + ServiceError::RequestTaken => StatusCode::INTERNAL_SERVER_ERROR, + ServiceError::Limit(_) => StatusCode::TOO_MANY_REQUESTS, + ServiceError::Hyper(_) => StatusCode::INTERNAL_SERVER_ERROR, + ServiceError::NoHost => StatusCode::BAD_REQUEST, + ServiceError::UnknownHost => StatusCode::NOT_FOUND, + ServiceError::UnknownPath => StatusCode::NOT_FOUND, + ServiceError::CantConnect => StatusCode::BAD_GATEWAY, + ServiceError::NotFound => StatusCode::NOT_FOUND, + ServiceError::Io(_) => StatusCode::BAD_REQUEST, + ServiceError::BadRange => StatusCode::BAD_REQUEST, + ServiceError::BadUtf8(_) => StatusCode::BAD_REQUEST, + ServiceError::BadUtf82(_) => StatusCode::BAD_REQUEST, + ServiceError::BadUtf83(_) => StatusCode::BAD_REQUEST, + ServiceError::BadPath => StatusCode::BAD_REQUEST, + ServiceError::BadAuth => StatusCode::UNAUTHORIZED, + ServiceError::BadBase64(_) => StatusCode::BAD_REQUEST, + ServiceError::UpgradeFailed => StatusCode::UPGRADE_REQUIRED, + ServiceError::Custom(_) => StatusCode::BAD_REQUEST, + ServiceError::CustomStatic(_) => StatusCode::BAD_REQUEST, + ServiceError::ParseIntError(_) => StatusCode::BAD_REQUEST, + ServiceError::InvalidHeader => StatusCode::BAD_REQUEST, + ServiceError::InvalidUri => StatusCode::BAD_REQUEST, + ServiceError::Other => StatusCode::INTERNAL_SERVER_ERROR, + } + } +} |