mirror of
https://github.com/pesde-pkg/pesde.git
synced 2024-12-13 20:00:36 +00:00
64 lines
1.8 KiB
Rust
64 lines
1.8 KiB
Rust
|
use actix_web::{body::BoxBody, HttpResponse, ResponseError};
|
||
|
use log::error;
|
||
|
use pesde::source::pesde::errors::ReadFile;
|
||
|
use serde::Serialize;
|
||
|
use thiserror::Error;
|
||
|
|
||
|
#[derive(Debug, Error)]
|
||
|
pub enum Error {
|
||
|
#[error("failed to parse query")]
|
||
|
Query(#[from] tantivy::query::QueryParserError),
|
||
|
|
||
|
#[error("error reading repo file")]
|
||
|
ReadFile(#[from] ReadFile),
|
||
|
|
||
|
#[error("error deserializing file")]
|
||
|
Deserialize(#[from] toml::de::Error),
|
||
|
|
||
|
#[error("error sending request")]
|
||
|
Reqwest(#[from] reqwest::Error),
|
||
|
|
||
|
#[error("failed to parse archive entries")]
|
||
|
Tar(#[from] std::io::Error),
|
||
|
|
||
|
#[error("invalid archive")]
|
||
|
InvalidArchive,
|
||
|
|
||
|
#[error("failed to read index config")]
|
||
|
Config(#[from] pesde::source::pesde::errors::ConfigError),
|
||
|
|
||
|
#[error("git error")]
|
||
|
Git(#[from] git2::Error),
|
||
|
|
||
|
#[error("failed to refresh source")]
|
||
|
Refresh(#[from] Box<pesde::source::pesde::errors::RefreshError>),
|
||
|
|
||
|
#[error("failed to serialize struct")]
|
||
|
Serialize(#[from] toml::ser::Error),
|
||
|
|
||
|
#[error("failed to serialize struct")]
|
||
|
SerializeJson(#[from] serde_json::Error),
|
||
|
}
|
||
|
|
||
|
#[derive(Debug, Serialize)]
|
||
|
pub struct ErrorResponse {
|
||
|
pub error: String,
|
||
|
}
|
||
|
|
||
|
impl ResponseError for Error {
|
||
|
fn error_response(&self) -> HttpResponse<BoxBody> {
|
||
|
match self {
|
||
|
Error::Query(e) => HttpResponse::BadRequest().json(ErrorResponse {
|
||
|
error: format!("failed to parse query: {e}"),
|
||
|
}),
|
||
|
Error::Tar(_) | Error::InvalidArchive => HttpResponse::BadRequest().json(ErrorResponse {
|
||
|
error: "invalid archive. ensure it has all the required files, and all the dependencies exist in the registry.".to_string(),
|
||
|
}),
|
||
|
e => {
|
||
|
log::error!("unhandled error: {e:?}");
|
||
|
HttpResponse::InternalServerError().finish()
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|