kellnr_docs/
docs_error.rs1use hyper::StatusCode;
2use kellnr_error::api_error::ApiError;
3use thiserror::Error;
4
5#[derive(Error, Debug)]
6pub enum DocsError {
7 #[error("Failed to extract docs")]
8 ExtractFailed,
9 #[error("Crate with version does not exist: {0}-{1}")]
10 CrateDoesNotExist(String, String),
11 #[error("Database error: {0}")]
12 DatabaseError(#[from] kellnr_db::error::DbError),
13 #[error("IO error: {0}")]
14 IoError(#[from] std::io::Error),
15 #[error("Failed to copy directory: {0}")]
16 CopyError(#[from] fs_extra::error::Error),
17 #[error("Cargo error: {0}")]
18 CargoError(String),
19}
20
21impl From<DocsError> for ApiError {
22 fn from(e: DocsError) -> Self {
23 match e {
24 DocsError::ExtractFailed => ApiError::from_err(&e, StatusCode::INTERNAL_SERVER_ERROR),
25 DocsError::CrateDoesNotExist(_, _) => ApiError::from_err(&e, StatusCode::NOT_FOUND),
26 DocsError::DatabaseError(db_error) => {
27 ApiError::from_err(&db_error, StatusCode::INTERNAL_SERVER_ERROR)
28 }
29 DocsError::IoError(error) => {
30 ApiError::from_err(&error, StatusCode::INTERNAL_SERVER_ERROR)
31 }
32 DocsError::CopyError(error) => {
33 ApiError::from_err(&error, StatusCode::INTERNAL_SERVER_ERROR)
34 }
35 DocsError::CargoError(error) => ApiError::new(
36 &error,
37 &String::default(),
38 StatusCode::INTERNAL_SERVER_ERROR,
39 ),
40 }
41 }
42}