From e367c341b7cd86b536b852eb1640be1da32581ea Mon Sep 17 00:00:00 2001 From: Timo Ley Date: Wed, 20 Jul 2022 11:57:38 +0200 Subject: [PATCH] Better error response messages --- src/v1/error.rs | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/src/v1/error.rs b/src/v1/error.rs index b5309bc..3e83980 100644 --- a/src/v1/error.rs +++ b/src/v1/error.rs @@ -8,7 +8,7 @@ use axum::{ use reqwest::StatusCode; use super::models::ErrorResponse; -use crate::error::APIError; +use crate::error::{APIError, ServiceError}; impl ErrorResponse { fn new(status: StatusCode, message: Option) -> Self { @@ -31,13 +31,21 @@ impl IntoResponse for APIError { sqlx::Error::RowNotFound => ErrorResponse::new(StatusCode::NOT_FOUND, None), _ => ErrorResponse::new(StatusCode::INTERNAL_SERVER_ERROR, None), }, - APIError::Multipart(_) => ErrorResponse::new(StatusCode::INTERNAL_SERVER_ERROR, None), + APIError::Multipart(_) => ErrorResponse::new( + StatusCode::BAD_REQUEST, + Some("Invalid Multipart Form".to_string()), + ), APIError::BadRequest(err) => ErrorResponse::new(StatusCode::BAD_REQUEST, Some(err)), APIError::Unauthorized(err) => ErrorResponse::new(StatusCode::UNAUTHORIZED, Some(err)), APIError::Forbidden(err) => ErrorResponse::new(StatusCode::FORBIDDEN, Some(err)), APIError::NotFound(err) => ErrorResponse::new(StatusCode::NOT_FOUND, Some(err)), - APIError::Internal(err) => ErrorResponse::new(StatusCode::INTERNAL_SERVER_ERROR, Some(err)), - APIError::Service(_) => ErrorResponse::new(StatusCode::INTERNAL_SERVER_ERROR, None), + APIError::Internal(err) => { + ErrorResponse::new(StatusCode::INTERNAL_SERVER_ERROR, Some(err)) + } + APIError::Service(err) => ErrorResponse::new( + StatusCode::INTERNAL_SERVER_ERROR, + Some(err.get_response_message()), + ), APIError::Query(_) => ErrorResponse::new(StatusCode::BAD_REQUEST, None), APIError::Decode(_) => ErrorResponse::new(StatusCode::BAD_REQUEST, None), }; @@ -45,3 +53,13 @@ impl IntoResponse for APIError { (status, Json(res)).into_response() } } + +impl ServiceError { + fn get_response_message(&self) -> String { + match self { + ServiceError::Reqwest(_) => "Reqwest error".to_string(), + ServiceError::Url(_) => "URL parse error".to_string(), + ServiceError::InvalidResponse(code) => format!("Invalid response code: {}", code), + } + } +}