use std::path::PathBuf;
use clap::{Parser, ValueEnum};
use log::LevelFilter;
use super::parsers::path_parser;
#[derive(Debug, Default, Parser)]
pub struct AccountFlag {
#[arg(long = "account", short = 'a', global = true)]
#[arg(name = "account_name", value_name = "NAME")]
pub name: Option<String>,
}
#[derive(Debug, Default, Parser)]
pub struct ConfigFlags {
#[arg(short = 'c', long = "config", global = true)]
#[arg(name = "config_paths", value_name = "PATH")]
#[arg(value_parser = path_parser, value_delimiter = ':')]
pub paths: Vec<PathBuf>,
}
#[derive(Debug, Default, Parser)]
pub struct AccountArg {
#[arg(name = "account_name", value_name = "NAME")]
pub name: String,
}
#[derive(Debug, Default, Parser)]
pub struct JsonFlag {
#[arg(long = "json", name = "json", global = true)]
pub enabled: bool,
}
#[derive(Debug, Default, Parser)]
pub struct LogFlags {
#[arg(name = "log-level", long = "log-level", visible_alias = "log")]
#[arg(value_enum, value_name = "LEVEL", global = true)]
pub level: Option<LogLevel>,
#[arg(long = "log-file", global = true, name = "log-file")]
#[arg(value_name = "PATH", value_parser = path_parser)]
pub file: Option<PathBuf>,
}
#[derive(Debug, Default, Clone, Copy, ValueEnum)]
pub enum LogLevel {
#[default]
Off,
Error,
Warn,
Info,
Debug,
Trace,
}
impl From<LogLevel> for LevelFilter {
fn from(level: LogLevel) -> Self {
match level {
LogLevel::Off => Self::Off,
LogLevel::Error => Self::Error,
LogLevel::Warn => Self::Warn,
LogLevel::Info => Self::Info,
LogLevel::Debug => Self::Debug,
LogLevel::Trace => Self::Trace,
}
}
}
#[macro_export]
macro_rules! long_version {
() => {
concat!(
"v",
env!("CARGO_PKG_VERSION"),
" ",
env!("CARGO_FEATURES"),
"\nbuild: ",
env!("CARGO_CFG_TARGET_OS"),
" ",
env!("CARGO_CFG_TARGET_ENV"),
" ",
env!("CARGO_CFG_TARGET_ARCH"),
"\ngit: ",
env!("GIT_DESCRIBE"),
", rev ",
env!("GIT_REV"),
)
};
}