From f55e04c219d9853d8d8023b6de982724d1590349 Mon Sep 17 00:00:00 2001 From: Alexander Mohr Date: Sun, 4 May 2025 00:09:39 +0200 Subject: [PATCH] fix crash on missing selection in file mode --- src/lib/mod.rs | 2 +- src/main.rs | 40 ++++++++++++++++++---------------------- 2 files changed, 19 insertions(+), 23 deletions(-) diff --git a/src/lib/mod.rs b/src/lib/mod.rs index f3fd6f2..5455ba3 100644 --- a/src/lib/mod.rs +++ b/src/lib/mod.rs @@ -1,7 +1,7 @@ use std::fmt; /// Defines error the lib can encounter -#[derive(Debug)] +#[derive(Debug, PartialEq)] pub enum Error { /// Failed to update a cache file with the given reason. UpdateCacheError(String), diff --git a/src/main.rs b/src/main.rs index 58c16f6..a583877 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,7 +2,7 @@ use std::env; use anyhow::anyhow; use worf_lib::config::Mode; -use worf_lib::{config, mode}; +use worf_lib::{Error, config, mode}; fn main() -> anyhow::Result<()> { env_logger::Builder::new() .parse_filters(&env::var("RUST_LOG").unwrap_or_else(|_| "error".to_owned())) @@ -13,30 +13,26 @@ fn main() -> anyhow::Result<()> { let config = config::load_config(Some(&args)).unwrap_or(args); if let Some(show) = &config.show() { - match show { - Mode::Run => { - mode::run(&config).map_err(|e| anyhow!(e))?; - } - Mode::Drun => { - mode::d_run(&config).map_err(|e| anyhow!(e))?; - } - Mode::Dmenu => { - mode::dmenu(&config).map_err(|e| anyhow!(e))?; - } - Mode::File => { - mode::file(&config).map_err(|e| anyhow!(e))?; - } + let result = match show { + Mode::Run => mode::run(&config), + Mode::Drun => mode::d_run(&config), + Mode::Dmenu => mode::dmenu(&config), + Mode::File => mode::file(&config), Mode::Math => { mode::math(&config); + Ok(()) } - Mode::Ssh => { - mode::ssh(&config).map_err(|e| anyhow!(e))?; - } - Mode::Emoji => { - mode::emoji(&config).map_err(|e| anyhow!(e))?; - } - Mode::Auto => { - mode::auto(&config).map_err(|e| anyhow!(e))?; + Mode::Ssh => mode::ssh(&config), + Mode::Emoji => mode::emoji(&config), + Mode::Auto => mode::auto(&config), + }; + + if let Err(err) = result { + if err == Error::NoSelection { + log::info!("no selection made"); + } else { + log::error!("Error occurred {err:?}"); + return Err(anyhow!("Error occurred {err:?}")); } }