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>;