Skip to main content

gdown_core/
error.rs

1//! Error types for gdown
2
3use thiserror::Error;
4
5/// Result type for gdown operations
6pub type Result<T> = std::result::Result<T, GdownError>;
7
8#[derive(Debug, Error)]
9pub enum GdownError {
10    #[error("URL parsing failed: {0}")]
11    UrlError(#[from] url::ParseError),
12
13    #[error("File URL retrieval failed: {0}")]
14    FileUrlRetrieval(String),
15
16    #[error("Download failed: {0}")]
17    Download(String),
18
19    #[error("IO error: {0}")]
20    Io(#[from] std::io::Error),
21
22    #[error("Hash mismatch: expected {expected}, got {actual}")]
23    HashMismatch { expected: String, actual: String },
24
25    #[error("File not found: {0}")]
26    FileNotFound(String),
27
28    #[error("Archive extraction failed: {0}")]
29    Extraction(String),
30
31    #[error("Invalid Google Drive URL: {0}")]
32    InvalidUrl(String),
33
34    #[error("Cache error: {0}")]
35    Cache(String),
36}
37
38impl GdownError {
39    pub fn exit_code(&self) -> i32 {
40        match self {
41            GdownError::UrlError(_) => 2,
42            GdownError::FileUrlRetrieval(_) => 3,
43            GdownError::Download(_) => 4,
44            GdownError::Io(_) => 5,
45            GdownError::HashMismatch { .. } => 7,
46            GdownError::FileNotFound(_) => 8,
47            GdownError::Extraction(_) => 9,
48            GdownError::InvalidUrl(_) => 10,
49            GdownError::Cache(_) => 11,
50        }
51    }
52}