diff options
Diffstat (limited to 'src/logging/config.rs')
-rw-r--r-- | src/logging/config.rs | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/logging/config.rs b/src/logging/config.rs new file mode 100644 index 0000000..8626a36 --- /dev/null +++ b/src/logging/config.rs @@ -0,0 +1,49 @@ +use super::level::{self, Level}; +use figment::{providers::Serialized, value, Figment, Metadata, Profile, Provider}; +use serde::{Deserialize, Serialize}; +use std::path::PathBuf; + +#[derive(Debug, PartialEq, Eq, Serialize, Deserialize)] +#[serde(default)] +pub struct Config { + #[serde(with = "level")] + pub stdout: Option<Level>, + #[serde(with = "level")] + pub level: Option<Level>, + pub path: PathBuf, +} + +impl Config { + // 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 path config") + } + + fn data(&self) -> figment::error::Result<value::Map<Profile, value::Dict>> { + Serialized::defaults(Self::default()).data() + } +} + +impl Default for Config { + fn default() -> Self { + Self { + stdout: Some(Level::ERROR), + level: None, + path: dirs::cache_dir() + .map(|p| p.join("tmuxr")) + .unwrap_or_default() + .join("tmuxr.log"), + } + } +} |