use std::{borrow::Cow, str::FromStr as _};
use serde::{Deserialize, Serialize};
use smart_default::SmartDefault;
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize, SmartDefault)]
#[serde(default)]
pub struct Log {
#[default = "INFO"]
pub level: Cow<'static, str>,
}
impl Log {
#[inline]
#[must_use]
pub fn level(&self) -> Option<slog::Level> {
slog::Level::from_str(&self.level).ok()
}
}
#[cfg(test)]
mod log_conf_specs {
use serial_test::serial;
use crate::{conf::Conf, overrided_by_env_conf};
#[test]
#[serial]
fn overrides_defaults() {
let default_conf = Conf::default();
let env_conf = overrided_by_env_conf!(
"MEDEA_LOG__LEVEL" => "WARN",
);
assert_ne!(default_conf.log.level(), env_conf.log.level());
assert_eq!(env_conf.log.level(), Some(slog::Level::Warning));
let none_lvl = overrided_by_env_conf!(
"MEDEA_LOG__LEVEL" => "OFF",
);
assert_eq!(none_lvl.log.level(), None);
}
}