From 513404430257a2b7b381931d540b1fbf44284560 Mon Sep 17 00:00:00 2001 From: Jeff Zhao Date: Sun, 11 Sep 2022 13:18:37 -0400 Subject: use Result instead of Option for parsing config files --- src/commands/delete_files.rs | 2 +- src/commands/flat.rs | 2 +- src/commands/search_fzf.rs | 2 +- src/config/keymap/keymapping.rs | 11 +++++++---- src/config/mimetype/registry.rs | 2 +- src/config/mod.rs | 32 +++++++++++++++++--------------- src/util/mimetype.rs | 4 ++-- 7 files changed, 30 insertions(+), 25 deletions(-) (limited to 'src') diff --git a/src/commands/delete_files.rs b/src/commands/delete_files.rs index b9eb660..66ec898 100644 --- a/src/commands/delete_files.rs +++ b/src/commands/delete_files.rs @@ -20,7 +20,7 @@ fn delete_files( .curr_tab_ref() .curr_list_ref() .map(|s| s.get_selected_paths()) - .unwrap_or_else(Vec::new); + .unwrap_or_default(); let paths_len = paths.len(); if paths_len == 0 { return Err(std::io::Error::new( diff --git a/src/commands/flat.rs b/src/commands/flat.rs index 94f0959..fc698d3 100644 --- a/src/commands/flat.rs +++ b/src/commands/flat.rs @@ -59,7 +59,7 @@ pub fn flatten(context: &mut AppContext, depth: usize) -> JoshutoResult { .curr_tab_ref() .curr_list_ref() .map(|lst| lst.get_index()) - .unwrap_or(None); + .unwrap_or_default(); let viewport_index: usize = context .tab_context_ref() .curr_tab_ref() diff --git a/src/commands/search_fzf.rs b/src/commands/search_fzf.rs index 7bc0ca8..39a399a 100644 --- a/src/commands/search_fzf.rs +++ b/src/commands/search_fzf.rs @@ -20,7 +20,7 @@ pub fn search_fzf(context: &mut AppContext, backend: &mut AppBackend) -> Joshuto .collect(); v }) - .unwrap_or_else(Vec::new); + .unwrap_or_default(); if items.is_empty() { return Err(JoshutoError::new( diff --git a/src/config/keymap/keymapping.rs b/src/config/keymap/keymapping.rs index dedbb39..b864230 100644 --- a/src/config/keymap/keymapping.rs +++ b/src/config/keymap/keymapping.rs @@ -110,10 +110,13 @@ impl From for AppKeyMapping { impl TomlConfigFile for AppKeyMapping { fn get_config(file_name: &str) -> Self { - parse_to_config_file::(file_name).unwrap_or_else(|| { - eprintln!("Using default keymapping"); - Self::default() - }) + match parse_to_config_file::(file_name) { + Ok(s) => s, + Err(e) => { + eprintln!("Failed to parse keymap: {}", e); + Self::default() + } + } } } diff --git a/src/config/mimetype/registry.rs b/src/config/mimetype/registry.rs index 452bb93..29d194b 100644 --- a/src/config/mimetype/registry.rs +++ b/src/config/mimetype/registry.rs @@ -67,7 +67,7 @@ impl From for AppProgramRegistry { let subtypes = data .subtype - .unwrap_or_else(|| HashMap::new()) + .unwrap_or_default() .into_iter() .map(|(k, v)| (k, v.app_list)) .collect(); diff --git a/src/config/mod.rs b/src/config/mod.rs index c1c71b7..db46f4d 100644 --- a/src/config/mod.rs +++ b/src/config/mod.rs @@ -13,8 +13,11 @@ pub use self::theme::*; use serde::de::DeserializeOwned; use std::fs; +use std::io; use std::path::{Path, PathBuf}; +use crate::error::JoshutoError; +use crate::error::JoshutoResult; use crate::CONFIG_HIERARCHY; pub trait TomlConfigFile { @@ -36,25 +39,24 @@ where } // parses a config file into its appropriate format -fn parse_to_config_file(filename: &str) -> Option +fn parse_to_config_file(filename: &str) -> JoshutoResult where T: DeserializeOwned, S: From, { - let file_path = search_directories(filename, &CONFIG_HIERARCHY)?; - let file_contents = match fs::read_to_string(&file_path) { - Ok(content) => content, - Err(e) => { - eprintln!("Error reading {} file: {}", filename, e); - return None; + match search_directories(filename, &CONFIG_HIERARCHY) { + Some(file_path) => { + let file_contents = fs::read_to_string(&file_path)?; + let config = toml::from_str::(&file_contents)?; + Ok(S::from(config)) } - }; - let config = match toml::from_str::(&file_contents) { - Ok(config) => config, - Err(e) => { - eprintln!("Error parsing {} file: {}", filename, e); - return None; + None => { + let error_kind = io::ErrorKind::NotFound; + let error = JoshutoError::new( + crate::error::JoshutoErrorKind::Io(error_kind), + "No config directory found".to_string(), + ); + Err(error) } - }; - Some(S::from(config)) + } } diff --git a/src/util/mimetype.rs b/src/util/mimetype.rs index 423cb2f..e4859b6 100644 --- a/src/util/mimetype.rs +++ b/src/util/mimetype.rs @@ -21,7 +21,7 @@ impl Mimetype { } pub fn get_subtype(&self) -> &str { - &&self._subtype + &self._subtype } } @@ -51,7 +51,7 @@ pub fn get_mimetype(p: &Path) -> JoshutoResult { JoshutoErrorKind::Io(io::ErrorKind::InvalidInput), "Unknown mimetype".to_string(), ); - return Err(error); + Err(error) } } } -- cgit v1.2.3