use std::path::PathBuf;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct LoggingConfig {
destinations: Vec<LogDestinationConfig>,
}
impl LoggingConfig {
pub fn new(destinations: Vec<LogDestinationConfig>) -> Self {
Self { destinations }
}
pub fn disabled() -> Self {
Self {
destinations: vec![],
}
}
pub fn destinations(&self) -> &[LogDestinationConfig] {
&self.destinations
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct LogDestinationConfig {
pub destination: LogDestination,
pub level: Option<log::LevelFilter>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum LogDestination {
Stderr,
File(PathBuf),
Syslog,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn disabled() {
let config = LoggingConfig::disabled();
assert!(config.destinations().is_empty());
}
#[test]
fn new() {
let config = LoggingConfig::new(vec![
LogDestinationConfig {
destination: LogDestination::Stderr,
level: Some(log::LevelFilter::Info),
},
LogDestinationConfig {
destination: LogDestination::File(PathBuf::from("/tmp/logfile")),
level: Some(log::LevelFilter::Debug),
},
]);
assert_eq!(
vec![
LogDestinationConfig {
destination: LogDestination::Stderr,
level: Some(log::LevelFilter::Info),
},
LogDestinationConfig {
destination: LogDestination::File(PathBuf::from("/tmp/logfile")),
level: Some(log::LevelFilter::Debug),
},
],
config.destinations()
);
}
}