From 61b6008db55f8aa6d9cc8d8998c3e28916e144cc Mon Sep 17 00:00:00 2001 From: Naz Date: Thu, 31 Jul 2025 14:50:21 +0100 Subject: =?UTF-8?q?=E2=9C=A8feat:=20add=20an=20error=20module?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/error.rs | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 src/error.rs (limited to 'src/error.rs') diff --git a/src/error.rs b/src/error.rs new file mode 100644 index 0000000..0183e38 --- /dev/null +++ b/src/error.rs @@ -0,0 +1,21 @@ +use derive_more::From; + +pub type Result = core::result::Result; + +#[derive(Debug, From)] +pub enum Error { + InvalidPath, + NotFound(String), + + #[from] + Io(std::io::Error), + + #[from] + Json(serde_json::Error), + + #[from] + Http(reqwest::Error), + + #[from] + EnvVar(std::env::VarError), +} -- cgit v1.2.3 From bd230c3d916be2af8f97e587f3f764800077cba4 Mon Sep 17 00:00:00 2001 From: Naz Date: Thu, 31 Jul 2025 14:54:01 +0100 Subject: =?UTF-8?q?=E2=9C=A8feat:=20implement=20Display=20and=20Error=20tr?= =?UTF-8?q?aits=20for=20custom=20Error=20enum?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/error.rs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'src/error.rs') diff --git a/src/error.rs b/src/error.rs index 0183e38..3c51529 100644 --- a/src/error.rs +++ b/src/error.rs @@ -19,3 +19,21 @@ pub enum Error { #[from] EnvVar(std::env::VarError), } + +impl core::fmt::Display for Error { + fn fmt(&self, fmt: &mut core::fmt::Formatter) -> core::result::Result<(), std::fmt::Error> { + match self { + Error::Io(e) => match e.kind() { + std::io::ErrorKind::NotFound => write!(fmt, "File or directory not found"), + _ => write!(fmt, "IO error: {e}"), + }, + Error::NotFound(name) => write!(fmt, "Application '{name}' not found"), + Error::Json(e) => write!(fmt, "JSON error: {e}"), + Error::Http(e) => write!(fmt, "HTTP error: {e}"), + Error::EnvVar(e) => write!(fmt, "Environment variable error: {e}"), + Error::InvalidPath => write!(fmt, "Invalid path provided"), + } + } +} + +impl std::error::Error for Error {} -- cgit v1.2.3 From 1b50c5ce06d2356124991fa48e6881f61f646ca3 Mon Sep 17 00:00:00 2001 From: Naz Date: Fri, 1 Aug 2025 09:47:04 +0100 Subject: =?UTF-8?q?=F0=9F=90=9Bfix:=20exit=20with=20non-zero=20status=20wh?= =?UTF-8?q?en=20error=20occurs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/error.rs | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/error.rs') diff --git a/src/error.rs b/src/error.rs index 3c51529..39c421d 100644 --- a/src/error.rs +++ b/src/error.rs @@ -18,6 +18,9 @@ pub enum Error { #[from] EnvVar(std::env::VarError), + + #[from] + IndicatifTemplate(indicatif::style::TemplateError), } impl core::fmt::Display for Error { @@ -32,6 +35,7 @@ impl core::fmt::Display for Error { Error::Http(e) => write!(fmt, "HTTP error: {e}"), Error::EnvVar(e) => write!(fmt, "Environment variable error: {e}"), Error::InvalidPath => write!(fmt, "Invalid path provided"), + Error::IndicatifTemplate(e) => write!(fmt, "Progress bar template error: {e}"), } } } -- cgit v1.2.3 From dc0ee6ce99a0480b7a6c228492936b16ceaf60cd Mon Sep 17 00:00:00 2001 From: Naz Date: Sun, 3 Aug 2025 10:06:33 +0100 Subject: =?UTF-8?q?=E2=9C=A8feat:=20add=20a=20more=20spesific=20error=20fo?= =?UTF-8?q?r=20the=20download=20process?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/error.rs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'src/error.rs') diff --git a/src/error.rs b/src/error.rs index 39c421d..b473469 100644 --- a/src/error.rs +++ b/src/error.rs @@ -6,6 +6,10 @@ pub type Result = core::result::Result; pub enum Error { InvalidPath, NotFound(String), + Download { + url: String, + source: reqwest::Error, + }, #[from] Io(std::io::Error), @@ -36,6 +40,22 @@ impl core::fmt::Display for Error { Error::EnvVar(e) => write!(fmt, "Environment variable error: {e}"), Error::InvalidPath => write!(fmt, "Invalid path provided"), Error::IndicatifTemplate(e) => write!(fmt, "Progress bar template error: {e}"), + Error::Download { url, source } => { + if source.is_timeout() { + write!(fmt, "Download timed out from: {url}") + } else if source.is_connect() { + write!(fmt, "Failed to connect to: {url}") + } else if let Some(status) = source.status() { + match status.as_u16() { + 404 => write!(fmt, "AppImage not found at: {url}"), + 403 => write!(fmt, "Access denied at: {url}"), + 500..=599 => write!(fmt, "Server error when downloading from: {url}"), + _ => write!(fmt, "HTTP {status} error downloading from: {url}"), + } + } else { + write!(fmt, "Failed to download from {url}: {source}") + } + } } } } -- cgit v1.2.3