diff options
Diffstat (limited to 'src/config.rs')
-rw-r--r-- | src/config.rs | 87 |
1 files changed, 28 insertions, 59 deletions
diff --git a/src/config.rs b/src/config.rs index 5946102..94421f9 100644 --- a/src/config.rs +++ b/src/config.rs @@ -1,31 +1,27 @@ -use crate::{finder, logging, paths, Error, Result}; +use super::SearchPath; use figment::{providers::Serialized, value, Figment, Metadata, Profile, Provider}; use serde::{Deserialize, Serialize}; -#[derive(Debug, Default, PartialEq, Eq, Serialize, Deserialize)] -#[serde(default)] +#[derive(Debug, PartialEq, Eq, Clone, Default, Serialize, Deserialize)] pub struct Config { - #[serde(flatten)] - pub paths: paths::Config, - pub finder: finder::Config, - pub logging: logging::Config, + pub(crate) paths: Vec<SearchPath>, } impl Config { - // Provide a default provider, a `Figment`. - pub fn figment() -> Figment { - Figment::from(Config::default()) - } - // Extract the configuration from any `Provider` pub fn extract<T: Provider>(provider: T) -> figment::error::Result<Config> { Figment::from(provider).extract() } + + // Provide a default provider, a `Figment`. + pub fn figment() -> Figment { + Figment::from(Config::default()) + } } impl Provider for Config { fn metadata(&self) -> Metadata { - Metadata::named("Tmuxr directory config") + Metadata::named("Projectr config") } fn data(&self) -> figment::error::Result<value::Map<Profile, value::Dict>> { @@ -33,14 +29,6 @@ impl Provider for Config { } } -impl TryFrom<Figment> for Config { - type Error = Error; - - fn try_from(value: Figment) -> Result<Self> { - value.extract().map_err(Into::into) - } -} - #[cfg(test)] mod tests { use super::*; @@ -51,59 +39,40 @@ mod tests { fn test_extract() { figment::Jail::expect_with(|jail| { jail.create_file( - "tmuxr.toml", + "file.toml", r#" paths = [ "/path/to/projects", { path = "/path/to/other_projects", recurse = 1, hidden = true }, { path = "/path/to/another_project", recurse = 0 }, ] - - [finder] - program = "fzf" - args = ["-0", "-1", "--preview='cat'"] - - [logging] - level = "warn" - path = "/path/to/log_file" "#, )?; let config: Config = Figment::from(Serialized::defaults(Config::default())) - .merge(Toml::file("tmuxr.toml")) + .merge(Toml::file("file.toml")) .extract()?; assert_eq!( config, Config { - paths: paths::Config { - paths: Vec::from([ - paths::PathEntry { - path: "/path/to/projects".into(), - hidden: false, - recurse: None, - }, - paths::PathEntry { - path: "/path/to/other_projects".into(), - hidden: true, - recurse: Some(1), - }, - paths::PathEntry { - path: "/path/to/another_project".into(), - hidden: false, - recurse: Some(0), - }, - ]), - }, - finder: finder::Config { - program: "fzf".into(), - args: vec!["-0".into(), "-1".into(), "--preview='cat'".into()], - }, - logging: logging::Config { - stdout: None, - level: Some(logging::Level::WARN), - path: "/path/to/log_file".into() - }, + paths: Vec::from([ + SearchPath { + path: "/path/to/projects".into(), + hidden: false, + recurse: None, + }, + SearchPath { + path: "/path/to/other_projects".into(), + hidden: true, + recurse: Some(1), + }, + SearchPath { + path: "/path/to/another_project".into(), + hidden: false, + recurse: Some(0), + }, + ]), } ); |