Files
hoppscotch/packages/hoppscotch-agent/src-tauri/src/error.rs

80 lines
2.9 KiB
Rust

use axum::{
http::StatusCode,
response::{IntoResponse, Response},
Json,
};
use serde_json::json;
use thiserror::Error;
#[derive(Error, Debug)]
pub enum AppError {
#[error("Invalid Registration")]
InvalidRegistration,
#[error("Invalid Client Public Key")]
InvalidClientPublicKey,
#[error("Unauthorized")]
Unauthorized,
#[error("Request not found or already completed")]
RequestNotFound,
#[error("Internal server error")]
InternalServerError,
#[error("Invalid request: {0}")]
BadRequest(String),
#[error("Client certificate error")]
ClientCertError,
#[error("Root certificate error")]
RootCertError,
#[error("Invalid method")]
InvalidMethod,
#[error("Invalid URL")]
InvalidUrl,
#[error("Invalid headers")]
InvalidHeaders,
#[error("Request run error: {0}")]
RequestRunError(String),
#[error("Request cancelled")]
RequestCancelled,
#[error("Failed to clear registrations")]
RegistrationClearError,
#[error("Failed to insert registrations")]
RegistrationInsertError,
#[error("Failed to save registrations to store")]
RegistrationSaveError,
#[error("Store error: {0}")]
TauriPluginStore(#[from] tauri_plugin_store::Error),
#[error("Relay error: {0}")]
Relay(#[from] hoppscotch_relay::RelayError),
}
impl IntoResponse for AppError {
fn into_response(self) -> Response {
let (status, error_message) = match self {
AppError::InvalidRegistration => (StatusCode::BAD_REQUEST, self.to_string()),
AppError::InvalidClientPublicKey => (StatusCode::BAD_REQUEST, self.to_string()),
AppError::Unauthorized => (StatusCode::UNAUTHORIZED, self.to_string()),
AppError::RequestNotFound => (StatusCode::NOT_FOUND, self.to_string()),
AppError::InternalServerError => (StatusCode::INTERNAL_SERVER_ERROR, self.to_string()),
AppError::BadRequest(msg) => (StatusCode::BAD_REQUEST, msg),
AppError::ClientCertError => (StatusCode::BAD_REQUEST, self.to_string()),
AppError::RootCertError => (StatusCode::BAD_REQUEST, self.to_string()),
AppError::InvalidMethod => (StatusCode::BAD_REQUEST, self.to_string()),
AppError::InvalidUrl => (StatusCode::BAD_REQUEST, self.to_string()),
AppError::InvalidHeaders => (StatusCode::BAD_REQUEST, self.to_string()),
AppError::RequestRunError(msg) => (StatusCode::INTERNAL_SERVER_ERROR, msg),
AppError::RequestCancelled => (StatusCode::BAD_REQUEST, self.to_string()),
_ => (
StatusCode::INTERNAL_SERVER_ERROR,
"Internal Server Error".to_string(),
),
};
let body = Json(json!({
"error": error_message,
}));
(status, body).into_response()
}
}
pub type AppResult<T> = std::result::Result<T, AppError>;