81 lines
1.9 KiB
Rust
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()
|
|
}
|
|
}
|