download_lib/
error.rs

1use thiserror::Error;
2use tokio::task::JoinError;
3
4#[derive(Error, Debug)]
5pub enum DownloadError {
6    #[error("reqwest error->{source:?}")]
7    ReqwestError {
8        #[from]
9        source: reqwest::Error,
10    },
11    #[error("io error->{source:?}")]
12    IoError {
13        #[from]
14        source: std::io::Error,
15    },
16    #[error("not get file size ->{0:?}")]
17    NotGetFileSize(reqwest::Url),
18    #[error("save file is finish->{0:?}")]
19    SaveFileFinish(String),
20    #[error("not get file name ->{0:?}")]
21    NotFileName(reqwest::Url),
22    #[error("http error:{0}")]
23    HttpStatusError(String),
24    #[error("async join error:{0}")]
25    JoinInError(JoinError),
26}
27
28impl From<&DownloadError> for i32 {
29    fn from(v: &DownloadError) -> Self {
30        match v {
31            DownloadError::ReqwestError { .. } => 1,
32            DownloadError::IoError { .. } => 2,
33            DownloadError::NotGetFileSize { .. } => 3,
34            DownloadError::SaveFileFinish { .. } => 4,
35            DownloadError::NotFileName { .. } => 5,
36            DownloadError::HttpStatusError { .. } => 6,
37            DownloadError::JoinInError { .. } => 7,
38        }
39    }
40}
41
42pub type Result<T> = std::result::Result<T, DownloadError>;