summaryrefslogtreecommitdiffstats
path: root/crates/common/download/src/error.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/common/download/src/error.rs')
-rw-r--r--crates/common/download/src/error.rs39
1 files changed, 39 insertions, 0 deletions
diff --git a/crates/common/download/src/error.rs b/crates/common/download/src/error.rs
new file mode 100644
index 00000000..4647dfef
--- /dev/null
+++ b/crates/common/download/src/error.rs
@@ -0,0 +1,39 @@
+#[derive(Debug, thiserror::Error)]
+pub enum DownloadError {
+ #[error(transparent)]
+ FromBackoff(#[from] backoff::Error<reqwest::Error>),
+
+ #[error(transparent)]
+ FromElapsed(#[from] tokio::time::error::Elapsed),
+
+ #[error("I/O error: {reason:?}")]
+ FromIo { reason: String },
+
+ #[error("JSON parse error: {reason:?}")]
+ FromReqwest { reason: String },
+
+ #[error(transparent)]
+ FromUrlParse(#[from] url::ParseError),
+
+ #[error(transparent)]
+ FromNix(#[from] nix::Error),
+
+ #[error("Not enough disk space")]
+ InsufficientSpace,
+}
+
+impl From<reqwest::Error> for DownloadError {
+ fn from(err: reqwest::Error) -> Self {
+ DownloadError::FromReqwest {
+ reason: format!("{}", err),
+ }
+ }
+}
+
+impl From<std::io::Error> for DownloadError {
+ fn from(err: std::io::Error) -> Self {
+ DownloadError::FromIo {
+ reason: format!("{}", err),
+ }
+ }
+}