From a76cab9f30a51b9b4d2377b2d25640c129bf3ab3 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Fri, 14 Mar 2025 13:41:26 +0100 Subject: send better error status codes --- src/error.rs | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) (limited to 'src/error.rs') 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, + } + } +} -- cgit v1.2.3-70-g09d2