mirror of
https://wget.la/https://github.com/leookun/cursor-byok
synced 2026-10-05 04:07:36 +08:00
68 lines
2.1 KiB
Rust
68 lines
2.1 KiB
Rust
use axum::{
|
|
http::StatusCode,
|
|
response::{IntoResponse, Response},
|
|
Json,
|
|
};
|
|
|
|
pub type Result<T, E = Error> = std::result::Result<T, E>;
|
|
|
|
#[derive(Debug, thiserror::Error)]
|
|
pub enum Error {
|
|
#[error("configuration error: {0}")]
|
|
Config(String),
|
|
#[error("protocol error: {0}")]
|
|
Protocol(String),
|
|
#[error("provider error: {0}")]
|
|
Provider(String),
|
|
#[error("store error: {0}")]
|
|
Store(String),
|
|
#[error("run was cancelled")]
|
|
Cancelled,
|
|
#[error("run not found: {0}")]
|
|
RunNotFound(String),
|
|
#[error("database error: {0}")]
|
|
Database(#[from] sqlx::Error),
|
|
#[error("database migration error: {0}")]
|
|
Migration(#[from] sqlx::migrate::MigrateError),
|
|
#[error("http error: {0}")]
|
|
Http(#[from] reqwest::Error),
|
|
#[error("protobuf decode error: {0}")]
|
|
Decode(#[from] prost::DecodeError),
|
|
#[error("protobuf encode error: {0}")]
|
|
Encode(#[from] prost::EncodeError),
|
|
#[error("json error: {0}")]
|
|
Json(#[from] serde_json::Error),
|
|
#[error("io error: {0}")]
|
|
Io(#[from] std::io::Error),
|
|
}
|
|
|
|
impl IntoResponse for Error {
|
|
fn into_response(self) -> Response {
|
|
let status = match self {
|
|
Self::Config(_) | Self::Protocol(_) | Self::Decode(_) | Self::Json(_) => {
|
|
StatusCode::BAD_REQUEST
|
|
}
|
|
Self::RunNotFound(_) => StatusCode::NOT_FOUND,
|
|
Self::Provider(_) | Self::Http(_) => StatusCode::BAD_GATEWAY,
|
|
Self::Cancelled => StatusCode::CONFLICT,
|
|
Self::Store(_)
|
|
| Self::Database(_)
|
|
| Self::Migration(_)
|
|
| Self::Encode(_)
|
|
| Self::Io(_) => StatusCode::INTERNAL_SERVER_ERROR,
|
|
};
|
|
let code = match status {
|
|
StatusCode::BAD_REQUEST => "invalid_argument",
|
|
StatusCode::NOT_FOUND => "not_found",
|
|
StatusCode::CONFLICT => "aborted",
|
|
StatusCode::BAD_GATEWAY => "unavailable",
|
|
_ => "internal",
|
|
};
|
|
(
|
|
status,
|
|
Json(serde_json::json!({ "code": code, "message": self.to_string() })),
|
|
)
|
|
.into_response()
|
|
}
|
|
}
|