aboutsummaryrefslogtreecommitdiffstats
path: root/src/config.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/config.rs')
-rw-r--r--src/config.rs65
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()
+ },
}
);