1use std::fmt;
2
3#[derive(Debug)]
31pub enum DownloadError {
32 Reqwest(reqwest::Error),
34 ReqwestMiddleware(reqwest_middleware::Error),
36 Tokio(tokio::io::Error),
38 Url(url::ParseError),
40 Indicatif(indicatif::style::TemplateError),
42 Join(tokio::task::JoinError),
44 Custom(String),
48}
49
50impl fmt::Display for DownloadError {
51 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
52 match *self {
53 DownloadError::Reqwest(ref err) => err.fmt(f),
54 DownloadError::ReqwestMiddleware(ref err) => err.fmt(f),
55 DownloadError::Tokio(ref err) => err.fmt(f),
56 DownloadError::Url(ref err) => err.fmt(f),
57 DownloadError::Indicatif(ref err) => err.fmt(f),
58 DownloadError::Join(ref err) => err.fmt(f),
59 DownloadError::Custom(ref err) => err.fmt(f),
60 }
61 }
62}
63
64impl From<reqwest::Error> for DownloadError {
65 fn from(err: reqwest::Error) -> Self {
66 DownloadError::Reqwest(err)
67 }
68}
69
70impl From<reqwest_middleware::Error> for DownloadError {
71 fn from(err: reqwest_middleware::Error) -> Self {
72 DownloadError::ReqwestMiddleware(err)
73 }
74}
75
76impl From<tokio::io::Error> for DownloadError {
77 fn from(err: tokio::io::Error) -> Self {
78 DownloadError::Tokio(err)
79 }
80}
81
82impl From<url::ParseError> for DownloadError {
83 fn from(err: url::ParseError) -> Self {
84 DownloadError::Url(err)
85 }
86}
87
88impl From<indicatif::style::TemplateError> for DownloadError {
89 fn from(err: indicatif::style::TemplateError) -> Self {
90 DownloadError::Indicatif(err)
91 }
92}
93
94impl From<tokio::task::JoinError> for DownloadError {
95 fn from(err: tokio::task::JoinError) -> Self {
96 DownloadError::Join(err)
97 }
98}
99
100impl From<String> for DownloadError {
101 fn from(s: String) -> DownloadError {
102 DownloadError::Custom(s)
103 }
104}