use std::path::PathBuf;
use clap::Parser;
#[cfg(feature = "completions")]
use clap::Subcommand as ClapSubcommand;
#[cfg(feature = "color")]
use clap::ValueEnum;
#[derive(Debug, Parser)]
#[command(
name = "rusty-figlet",
version,
about = "Render ASCII-art banners from text",
long_about = None,
)]
pub struct Cli {
#[arg(short = 'f', long = "font", value_name = "FONT")]
pub font: Option<String>,
#[arg(short = 'd', long = "fontdir", value_name = "DIR")]
pub font_dirs: Vec<PathBuf>,
#[arg(short = 'w', long = "width", value_name = "INT")]
pub width: Option<u32>,
#[arg(short = 't', long = "terminal-width")]
pub use_terminal_width: bool,
#[arg(short = 'c', long = "center")]
pub center: bool,
#[arg(short = 'l', long = "left")]
pub left: bool,
#[arg(short = 'r', long = "right")]
pub right: bool,
#[arg(short = 'x', long = "font-default-justify")]
pub justify_default: bool,
#[arg(short = 'k', long = "kerning")]
pub kerning: bool,
#[arg(short = 'W', long = "full-width")]
pub full_width: bool,
#[arg(short = 'S', long = "force-smush")]
pub force_smush: bool,
#[arg(short = 's', long = "smush")]
pub default_smush: bool,
#[arg(short = 'o', long = "overlap")]
pub overlap: bool,
#[arg(
short = 'm',
long = "layout-mode",
value_name = "INT",
allow_hyphen_values = true
)]
pub explicit_layout: Option<i32>,
#[arg(short = 'p', long = "paragraph")]
pub paragraph: bool,
#[arg(short = 'n', long = "normal")]
pub normal: bool,
#[arg(short = 'C', long = "control-file", value_name = "FILE")]
pub control_file: Option<PathBuf>,
#[arg(short = 'N', long = "no-controlfile")]
pub no_controlfile: bool,
#[cfg(feature = "color")]
#[arg(long = "color", value_name = "WHEN", value_enum, default_value_t = ColorChoice::Auto)]
pub color: ColorChoice,
#[cfg(feature = "rainbow")]
#[arg(long = "rainbow")]
pub rainbow: bool,
#[arg(long = "strict", conflicts_with = "no_strict")]
pub strict: bool,
#[arg(long = "no-strict")]
pub no_strict: bool,
#[cfg(any(
feature = "filter-crop",
feature = "filter-gay",
feature = "filter-metal",
feature = "filter-flip",
feature = "filter-flop",
feature = "filter-rotate",
feature = "filter-border",
))]
#[arg(short = 'F', long = "filter", value_name = "CHAIN")]
pub filter: Vec<String>,
#[cfg(any(
feature = "output-html",
feature = "output-irc",
feature = "output-svg",
))]
#[arg(short = 'E', long = "export", value_name = "FORMAT")]
pub export_format: Option<String>,
#[cfg(feature = "color-truecolor")]
#[arg(long = "truecolor")]
pub truecolor: bool,
#[cfg(feature = "color-256")]
#[arg(long = "ansi256")]
pub ansi256: bool,
#[cfg(feature = "color")]
#[arg(long = "background", value_name = "COLOR")]
pub background: Option<String>,
#[cfg(any(feature = "color-truecolor", feature = "color-256"))]
#[arg(long = "no-downgrade-warning")]
pub no_downgrade_warning: bool,
#[cfg(feature = "output-irc")]
#[arg(long = "warn-irc-strip")]
pub warn_irc_strip: bool,
#[arg(value_name = "MESSAGE", trailing_var_arg = true)]
pub message: Vec<String>,
#[cfg(feature = "completions")]
#[command(subcommand)]
pub subcommand: Option<Subcommand>,
}
#[cfg(feature = "color")]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, ValueEnum)]
#[value(rename_all = "lower")]
pub enum ColorChoice {
Auto,
Always,
Never,
}
#[cfg(feature = "completions")]
#[derive(Debug, ClapSubcommand)]
pub enum Subcommand {
Completions {
shell: clap_complete::Shell,
},
}
#[cfg(test)]
mod tests {
use super::*;
use clap::CommandFactory;
#[test]
fn cli_command_builds() {
Cli::command().debug_assert();
}
}