diff options
Diffstat (limited to 'src/config.rs')
-rw-r--r-- | src/config.rs | 65 |
1 files changed, 19 insertions, 46 deletions
diff --git a/src/config.rs b/src/config.rs index d31eca8..afbb401 100644 --- a/src/config.rs +++ b/src/config.rs @@ -1,51 +1,20 @@ -use crate::{Error, Result}; +use crate::{finder, logging, paths, Error, Result}; use figment::{providers::Serialized, value, Figment, Metadata, Profile, Provider}; use serde::{Deserialize, Serialize}; -use std::{fs::File, path::PathBuf, sync::Arc}; -use tracing_subscriber::{Layer, Registry}; -#[derive(Debug, PartialEq, Eq, Serialize, Deserialize)] +#[derive(Debug, Default, PartialEq, Eq, Serialize, Deserialize)] #[serde(default)] pub struct Config { #[serde(flatten)] - pub paths: crate::paths::Config, - pub finder: crate::finder::Config, - pub log_enabled: bool, - pub log_file: PathBuf, + pub paths: paths::Config, + pub finder: finder::Config, + pub logging: logging::Config, } impl Config { pub fn extract<T: Provider>(provider: T) -> figment::error::Result<Config> { Figment::from(provider).extract() } - - pub fn as_layer(&self) -> Result<Vec<Box<dyn Layer<Registry> + Send + Sync>>> { - let mut layers = Vec::new(); - - if self.log_enabled { - let file = File::create(&self.log_file)?; - let log_layer = tracing_subscriber::fmt::layer() - .with_writer(Arc::new(file)) - .boxed(); - layers.push(log_layer); - }; - - Ok(layers) - } -} - -impl Default for Config { - fn default() -> Self { - Self { - paths: Default::default(), - finder: Default::default(), - log_enabled: Default::default(), - log_file: dirs::cache_dir() - .map(|p| p.join("tmuxr")) - .unwrap_or_default() - .join("tmuxr.log"), - } - } } impl Provider for Config { @@ -69,7 +38,6 @@ impl TryFrom<Figment> for Config { #[cfg(test)] mod tests { use super::*; - use crate::paths::PathEntry; use figment::providers::{Format, Serialized, Toml}; #[test] @@ -78,8 +46,6 @@ mod tests { jail.create_file( "tmuxr.toml", r#" - log_enabled = true - log_file = "/path/to/log_file" paths = [ "/path/to/projects", { path = "/path/to/other_projects", recurse = 1, hidden = true }, @@ -89,6 +55,10 @@ mod tests { [finder] program = "fzf" args = ["-0", "-1", "--preview='cat'"] + + [logging] + level = "warn" + path = "/path/to/log_file" "#, )?; @@ -99,31 +69,34 @@ mod tests { assert_eq!( config, Config { - paths: crate::paths::Config { + paths: paths::Config { paths: Vec::from([ - PathEntry { + paths::PathEntry { path: "/path/to/projects".into(), hidden: false, recurse: None, }, - PathEntry { + paths::PathEntry { path: "/path/to/other_projects".into(), hidden: true, recurse: Some(1), }, - PathEntry { + paths::PathEntry { path: "/path/to/another_project".into(), hidden: false, recurse: Some(0), }, ]), }, - finder: crate::finder::Config { + finder: finder::Config { program: "fzf".into(), args: vec!["-0".into(), "-1".into(), "--preview='cat'".into()], }, - log_enabled: true, - log_file: "/path/to/log_file".into() + logging: logging::Config { + stdout: None, + level: Some(logging::Level::WARN), + path: "/path/to/log_file".into() + }, } ); |