From e3c689e62b93ceebadfb0a02a667dd34e549fedc Mon Sep 17 00:00:00 2001 From: mgros Date: Wed, 23 Sep 2026 20:13:42 +0200 Subject: [PATCH 1/2] Refactor `read_prefs_file` to simplify error handling and optimize section processing --- src/prefs.rs | 35 +++++++++++------------------------ 1 file changed, 11 insertions(+), 24 deletions(-) diff --git a/src/prefs.rs b/src/prefs.rs index f515ca483..c7f571539 100644 --- a/src/prefs.rs +++ b/src/prefs.rs @@ -106,37 +106,24 @@ impl Preferences{ fn read_prefs_file(file: &Path, mut base_prefs: Preferences) -> Result { let file_name = file.to_str().unwrap(); - let docs; - match read_to_string_shim(file) { - Err(e) => { - bail!("Couldn't read file {}\n{}", file_name, e); - }, - Ok( file_contents) => { - match YamlLoader::load_from_str(&file_contents) { - Err(e) => { - bail!("Yaml parse error ('{}') in preference file {}.", e, file_name); - }, - Ok(d) => docs = d, - } - - } - } + let file_contents = read_to_string_shim(file) + .map_err(|e| anyhow!("Couldn't read file {file_name}\n{e}"))?; + let docs = YamlLoader::load_from_str(&file_contents) + .map_err(|e| anyhow!("Yaml parse error ('{e}') in preference file {file_name}."))?; if docs.len() != 1 { bail!("MathCAT: error in prefs file '{}'.\nFound {} 'documents' -- should only be 1.", file_name, docs.len()); } let doc = &docs[0]; + const SECTIONS: [&str; 4] = ["Speech", "Navigation", "Braille", "Other"]; if cfg!(debug_assertions) { - verify_keys(doc, "Speech", file_name)?; - verify_keys(doc, "Navigation", file_name)?; - verify_keys(doc, "Braille", file_name)?; - verify_keys(doc, "Other", file_name)?; + for section in SECTIONS { + verify_keys(doc, section, file_name)?; + } + } + for section in SECTIONS { + add_prefs(&mut base_prefs.prefs, &doc[section], "", file_name); } - - add_prefs(&mut base_prefs.prefs, &doc["Speech"], "", file_name); - add_prefs(&mut base_prefs.prefs, &doc["Navigation"], "", file_name); - add_prefs(&mut base_prefs.prefs, &doc["Braille"], "", file_name); - add_prefs(&mut base_prefs.prefs, &doc["Other"], "", file_name); return Ok(base_prefs); From ab3ba70222576c0fcf7ba488998d551e78a603d6 Mon Sep 17 00:00:00 2001 From: mgros Date: Wed, 23 Sep 2026 21:17:32 +0200 Subject: [PATCH 2/2] use with_context(..) from anyhow-crate for error-handling --- src/prefs.rs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/prefs.rs b/src/prefs.rs index c7f571539..162574c5b 100644 --- a/src/prefs.rs +++ b/src/prefs.rs @@ -107,9 +107,9 @@ impl Preferences{ fn read_prefs_file(file: &Path, mut base_prefs: Preferences) -> Result { let file_name = file.to_str().unwrap(); let file_contents = read_to_string_shim(file) - .map_err(|e| anyhow!("Couldn't read file {file_name}\n{e}"))?; + .with_context(|| format!("Couldn't read file {file_name}"))?; let docs = YamlLoader::load_from_str(&file_contents) - .map_err(|e| anyhow!("Yaml parse error ('{e}') in preference file {file_name}."))?; + .with_context(|| format!("Yaml parse error in preference file {file_name}."))?; if docs.len() != 1 { bail!("MathCAT: error in prefs file '{}'.\nFound {} 'documents' -- should only be 1.", file_name, docs.len()); } @@ -247,10 +247,8 @@ impl PreferenceManager { // Note: if current_dir() also fails, unwrap_or_default yields an empty PathBuf, // and the result may remain relative. #[cfg(not(feature = "include-zip"))] - let rules_dir = match canonicalize_shim(&rules_dir) { - Err(e) => bail!("set_rules_dir: could not canonicalize path {}: {}", rules_dir.display(), e), - Ok(rules_dir) => rules_dir, - }; + let rules_dir = canonicalize_shim(&rules_dir) + .with_context(|| format!("set_rules_dir: could not canonicalize path {}", rules_dir.display()))?; self.set_rules_dir(&rules_dir)?; self.set_preference_files()?;