feat: better error handling

This commit is contained in:
Timo Ley 2023-06-23 16:10:56 +02:00
parent b8e64e2d2c
commit 5a7691062b

View file

@ -46,7 +46,7 @@ impl IntoResponse for ServiceError {
fn into_response(self) -> axum::http::Response<Self::Body> {
let res = match self {
ServiceError::Database(err) => ErrorResponse::new(StatusCode::INTERNAL_SERVER_ERROR, Some(err.to_string())),
ServiceError::Database(err) => get_oracle_error_response(err),
ServiceError::ErrorResponse(code, reason) => ErrorResponse::new(code, reason),
};
let status = res.status;
@ -62,4 +62,18 @@ impl ErrorResponse {
error: message.unwrap_or_else(|| reason.to_string()),
}
}
}
fn get_oracle_error_response(error: sibyl::Error) -> ErrorResponse {
match error {
sibyl::Error::Interface(_) => ErrorResponse::new(StatusCode::INTERNAL_SERVER_ERROR, None),
sibyl::Error::Oracle(code, message) => {
if code == 1 || code == 2291 || code == 20111 {
ErrorResponse::new(StatusCode::CONFLICT, Some(message))
} else {
ErrorResponse::new(StatusCode::INTERNAL_SERVER_ERROR, Some(message))
}
},
sibyl::Error::JoinError(_) => ErrorResponse::new(StatusCode::INTERNAL_SERVER_ERROR, None),
}
}