synchronizator/src/config.rs

81 lines
1.9 KiB
Rust

use clap::{Parser, ValueEnum};
use serde::{Deserialize, Serialize};
use std::fmt;
use std::path::PathBuf;
use tracing_core::LevelFilter;
#[derive(ValueEnum, Clone, Debug, Deserialize, Serialize)]
pub enum VerbosityLevel {
Off,
Error,
Warn,
Info,
Debug,
Trace,
}
impl Default for VerbosityLevel {
fn default() -> Self {
VerbosityLevel::Error
}
}
impl fmt::Display for VerbosityLevel {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
VerbosityLevel::Off => {
write!(f, "off")
}
VerbosityLevel::Error => {
write!(f, "error")
}
VerbosityLevel::Warn => {
write!(f, "warn")
}
VerbosityLevel::Info => {
write!(f, "info")
}
VerbosityLevel::Debug => {
write!(f, "debug")
}
VerbosityLevel::Trace => {
write!(f, "trace")
}
}
}
}
impl Into<LevelFilter> for VerbosityLevel {
fn into(self) -> LevelFilter {
match self {
VerbosityLevel::Off => LevelFilter::OFF,
VerbosityLevel::Error => LevelFilter::ERROR,
VerbosityLevel::Warn => LevelFilter::WARN,
VerbosityLevel::Info => LevelFilter::INFO,
VerbosityLevel::Debug => LevelFilter::DEBUG,
VerbosityLevel::Trace => LevelFilter::TRACE,
}
}
}
#[derive(Debug, Parser, Serialize, Deserialize)]
pub struct Config {
path: PathBuf,
#[arg(
long,
short = 'v',
default_value_t,
global = true,
help = "Increase logging verbosity"
)]
log_level: VerbosityLevel,
}
impl Config {
pub fn path(&self) -> &PathBuf {
&self.path
}
pub fn log_level(&self) -> LevelFilter {
self.log_level.clone().into()
}
}