summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJeff Zhao <jeff.no.zhao@gmail.com>2022-09-11 13:18:37 -0400
committerJeff Zhao <jeff.no.zhao@gmail.com>2022-09-11 13:18:37 -0400
commit513404430257a2b7b381931d540b1fbf44284560 (patch)
treeb8f7f20d56515c58f964bc5eccdc85b63764402b /src
parentf117ddaccb996942774d9efee9c5807fe7272ded (diff)
use Result instead of Option for parsing config files
Diffstat (limited to 'src')
-rw-r--r--src/commands/delete_files.rs2
-rw-r--r--src/commands/flat.rs2
-rw-r--r--src/commands/search_fzf.rs2
-rw-r--r--src/config/keymap/keymapping.rs11
-rw-r--r--src/config/mimetype/registry.rs2
-rw-r--r--src/config/mod.rs32
-rw-r--r--src/util/mimetype.rs4
7 files changed, 30 insertions, 25 deletions
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<AppKeyMappingRaw> for AppKeyMapping {
impl TomlConfigFile for AppKeyMapping {
fn get_config(file_name: &str) -> Self {
- parse_to_config_file::<AppKeyMappingRaw, AppKeyMapping>(file_name).unwrap_or_else(|| {
- eprintln!("Using default keymapping");
- Self::default()
- })
+ match parse_to_config_file::<AppKeyMappingRaw, AppKeyMapping>(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<AppProgramRegistryRaw> 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<T, S>(filename: &str) -> Option<S>
+fn parse_to_config_file<T, S>(filename: &str) -> JoshutoResult<S>
where
T: DeserializeOwned,
S: From<T>,
{
- 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::<T>(&file_contents)?;
+ Ok(S::from(config))
}
- };
- let config = match toml::from_str::<T>(&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<Mimetype> {
JoshutoErrorKind::Io(io::ErrorKind::InvalidInput),
"Unknown mimetype".to_string(),
);
- return Err(error);
+ Err(error)
}
}
}