use clap::Parser;
use std::path::PathBuf;
use clap_color_help::default_styles;
#[derive(Parser, Debug)]
#[command(
name = "logger2",
author = "Hadi Cahyadi <cumulus13@gmail.com>",
version,
about,
long_about = None,
propagate_version = true,
styles = default_styles()
)]
pub struct Cli {
#[arg(value_name = "MESSAGE")]
pub message: Vec<String>,
#[arg(short = 'p', long = "priority", value_name = "FACILITY.LEVEL")]
pub priority: Option<String>,
#[arg(short = 'l', long = "level", value_name = "LEVEL")]
pub level: Option<String>,
#[arg(short = 't', long = "tag", value_name = "TAG")]
pub tag: Option<String>,
#[arg(short = 'i', long = "id", value_name = "PID", num_args = 0..=1, default_missing_value = "self")]
pub id: Option<String>,
#[arg(short = 's', long = "stderr")]
pub stderr: bool,
#[arg(short = 'f', long = "file", value_name = "FILE")]
pub file: Option<PathBuf>,
#[arg(short = 'n', long = "server", value_name = "HOST")]
pub server: Option<String>,
#[arg(short = 'P', long = "port", value_name = "PORT")]
pub port: Option<u16>,
#[arg(short = 'T', long = "tcp", conflicts_with = "udp")]
pub tcp: bool,
#[arg(short = 'd', long = "udp")]
pub udp: bool,
#[arg(short = 'u', long = "socket", value_name = "PATH")]
pub socket: Option<PathBuf>,
#[arg(short = 'r', long = "rfc5424")]
pub rfc5424: bool,
#[arg(short = 'S', long = "size", value_name = "BYTES")]
pub size: Option<usize>,
#[arg(long = "octet-count")]
pub octet_count: bool,
#[arg(short = 'c', long = "color", value_name = "HEX")]
pub color: Option<String>,
#[arg(short = 'e', long = "emoji", value_name = "EMOJI")]
pub emoji: Option<String>,
#[arg(long = "no-color", conflicts_with = "color")]
pub no_color: bool,
#[arg(long = "no-emoji", conflicts_with = "emoji")]
pub no_emoji: bool,
#[arg(long = "force-color", conflicts_with_all = ["no_color"])]
pub force_color: bool,
#[arg(long = "json")]
pub json: bool,
#[arg(long = "config", value_name = "PATH", env = "LOGGER2_CONFIG")]
pub config: Option<PathBuf>,
#[arg(long = "init-config")]
pub init_config: bool,
#[arg(long = "print-config")]
pub print_config: bool,
#[arg(long = "timestamp-format", value_name = "FORMAT")]
pub timestamp_format: Option<String>,
#[arg(short = 'k', long = "kv", value_name = "KEY=VALUE")]
pub kv: Vec<String>,
#[arg(long = "dry-run")]
pub dry_run: bool,
#[arg(short = 'q', long = "quiet", conflicts_with = "verbose")]
pub quiet: bool,
#[arg(short = 'v', long = "verbose", action = clap::ArgAction::Count)]
pub verbose: u8,
}
impl Cli {
pub fn protocol_override(&self) -> Option<crate::config::Protocol> {
if self.tcp {
Some(crate::config::Protocol::Tcp)
} else if self.udp {
Some(crate::config::Protocol::Udp)
} else {
None
}
}
}