use std::collections::BTreeMap;
use serde_derive::Deserialize;
use serde_derive::Serialize;
#[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug, Serialize, Deserialize)]
pub struct Config {
#[serde(rename = "async", default = "Config::default_async_flush")]
pub async_flush: bool,
#[serde(default)]
pub backend: LoggingBackend,
#[serde(default = "Config::default_include_version")]
pub include_version: bool,
#[serde(default)]
pub level: LoggingLevel,
#[serde(default)]
pub modules: BTreeMap<String, LoggingLevel>,
#[serde(default = "Config::default_verbose")]
pub verbose: bool,
}
impl Default for Config {
fn default() -> Config {
Config {
async_flush: Config::default_async_flush(),
backend: LoggingBackend::default(),
include_version: Config::default_include_version(),
level: LoggingLevel::default(),
modules: BTreeMap::new(),
verbose: Config::default_verbose(),
}
}
}
impl Config {
fn default_async_flush() -> bool {
true
}
fn default_include_version() -> bool {
false
}
fn default_verbose() -> bool {
false
}
}
#[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug, Serialize, Deserialize)]
#[serde(tag = "name", content = "options")]
pub enum LoggingBackend {
#[cfg(feature = "journald")]
#[serde(rename = "journald")]
Journald,
#[serde(rename = "json")]
Json,
}
impl Default for LoggingBackend {
fn default() -> LoggingBackend {
LoggingBackend::Json
}
}
#[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug, Serialize, Deserialize)]
pub enum LoggingLevel {
#[serde(rename = "debug")]
Debug = 1,
#[serde(rename = "info")]
Info = 2,
#[serde(rename = "warning")]
Warning = 3,
#[serde(rename = "error")]
Error = 4,
#[serde(rename = "critical")]
Critical = 5,
}
impl Default for LoggingLevel {
#[cfg(debug_assertions)]
fn default() -> LoggingLevel {
LoggingLevel::Debug
}
#[cfg(not(debug_assertions))]
fn default() -> LoggingLevel {
LoggingLevel::Info
}
}
impl From<LoggingLevel> for ::slog::Level {
fn from(level: LoggingLevel) -> Self {
match level {
LoggingLevel::Critical => ::slog::Level::Critical,
LoggingLevel::Error => ::slog::Level::Error,
LoggingLevel::Warning => ::slog::Level::Warning,
LoggingLevel::Info => ::slog::Level::Info,
LoggingLevel::Debug => ::slog::Level::Debug,
}
}
}