branch: main
error.rs
1624 bytesRaw
use axum::{
http::StatusCode,
response::{IntoResponse, Response},
Json,
};
use serde::Serialize;
#[derive(Debug)]
pub enum AppError {
NotFound,
BadRequest(String),
Unauthorized,
Forbidden,
Internal(String),
}
impl From<worker::KvError> for AppError {
fn from(err: worker::KvError) -> Self {
AppError::Internal(err.to_string())
}
}
impl From<worker::Error> for AppError {
fn from(err: worker::Error) -> Self {
AppError::Internal(err.to_string())
}
}
#[derive(Serialize)]
struct Err {
msg: String,
}
impl IntoResponse for AppError {
fn into_response(self) -> Response {
match self {
AppError::NotFound => (
StatusCode::NOT_FOUND,
Json(Err {
msg: "not_found".into(),
}),
),
AppError::BadRequest(msg) => (StatusCode::BAD_REQUEST, Json(Err { msg })),
AppError::Unauthorized => (
StatusCode::UNAUTHORIZED,
Json(Err {
msg: "UNAUTHORIZED".into(),
}),
),
AppError::Forbidden => (
StatusCode::FORBIDDEN,
Json(Err {
msg: "FORBIDDEN".into(),
}),
),
AppError::Internal(_err) => (
// log the err or put into a tracing span!
StatusCode::INTERNAL_SERVER_ERROR,
Json(Err {
msg: "INTERNAL SERVER ERROR".into(),
}),
),
}
.into_response()
}
}