From 100ee9bef9905f53c8dc00d1233e772909ca391b Mon Sep 17 00:00:00 2001 From: steven-omaha <35634100+steven-omaha@users.noreply.github.com> Date: Thu, 23 Feb 2023 12:09:09 +0100 Subject: [PATCH] start reworking config loading (for transition) WIP --- crates/main/main.rs | 21 ++++++++++++++++++--- crates/pacdef_core/src/config.rs | 6 +----- crates/pacdef_core/src/errors.rs | 3 +++ 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/crates/main/main.rs b/crates/main/main.rs index aa3e084..e6b3afa 100644 --- a/crates/main/main.rs +++ b/crates/main/main.rs @@ -17,7 +17,7 @@ Main program for `pacdef`. All internal logic happens in [`pacdef_core`]. use std::process::{ExitCode, Termination}; -use anyhow::{Context, Result}; +use anyhow::{bail, Context, Result}; use pacdef_core::{get_args, get_config_path, get_group_dir, Config, Group, Pacdef}; @@ -45,8 +45,7 @@ fn main_inner() -> Result<()> { let args = get_args(); let config_file = get_config_path().context("getting config file")?; - let config = Config::load(&config_file) - .with_context(|| format!("loading config file {}", config_file.to_string_lossy()))?; + let config = load_config(config_file)?; let group_dir = get_group_dir().context("resolving group dir")?; let groups = Group::load(&group_dir, config.warn_not_symlinks) @@ -55,3 +54,19 @@ fn main_inner() -> Result<()> { let pacdef = Pacdef::new(args, config, groups); pacdef.run_action_from_arg().context("running action") } + +fn load_config(config_file: std::path::PathBuf) -> Result { + let config = match Config::load(&config_file) + .with_context(|| format!("loading config file {}", config_file.to_string_lossy())) + { + Ok(config) => config, + Err(e) => { + let e = e.root_cause().downcast_ref::(); + match e { + Some(pacdef_core::Error::ConfigFileNotFound) => Config::default(), + _ => bail!("huh"), + } + } + }; + Ok(config) +} diff --git a/crates/pacdef_core/src/config.rs b/crates/pacdef_core/src/config.rs index 6ee903d..bd8f2b2 100644 --- a/crates/pacdef_core/src/config.rs +++ b/crates/pacdef_core/src/config.rs @@ -29,11 +29,7 @@ impl Config { Ok(content) => content, Err(e) => { if e.kind() == ErrorKind::NotFound { - println!( - "creating default config under {}", - config_file.to_string_lossy() - ); - return Self::use_default_and_save_to(config_file); + bail!(crate::Error::ConfigFileNotFound) } bail!("unexpected error occured: {e:?}"); } diff --git a/crates/pacdef_core/src/errors.rs b/crates/pacdef_core/src/errors.rs index e597007..b3cd49d 100644 --- a/crates/pacdef_core/src/errors.rs +++ b/crates/pacdef_core/src/errors.rs @@ -7,12 +7,15 @@ use std::fmt::Display; pub enum Error { /// Package search yields no results. NoPackagesFound, + /// Config file not found. + ConfigFileNotFound, } impl Display for Error { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { Self::NoPackagesFound => f.write_str("no packages matching query"), + Self::ConfigFileNotFound => f.write_str("config file not found"), } } }