summaryrefslogtreecommitdiffstats
path: root/src/config.rs
diff options
context:
space:
mode:
authorToby Vincent <tobyv13@gmail.com>2022-11-21 14:26:02 -0600
committerToby Vincent <tobyv13@gmail.com>2022-11-21 14:26:02 -0600
commit72e9765d58b87125bdd5a2664bbc58202bdedff7 (patch)
tree656f7e2c46f8ca936439538d306f84409690946d /src/config.rs
parentfe92d86fbe5f73bc2662a128b6431ec2089d05b8 (diff)
chore: split out projectr from tmuxr
Diffstat (limited to 'src/config.rs')
-rw-r--r--src/config.rs87
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),
+ },
+ ]),
}
);