Skip to main content

kellnr_docs/
docs_error.rs

1use 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}