From 29e9d92768c48829af449caccc1c5990fdea9675 Mon Sep 17 00:00:00 2001 From: Isaac Mills Date: Sat, 29 Jan 2022 23:12:05 -0500 Subject: [PATCH] Cwap awgument awtimization UwU --- src/main.rs | 147 +++++++++++++++++++++++++++++++++++----------------- 1 file changed, 100 insertions(+), 47 deletions(-) diff --git a/src/main.rs b/src/main.rs index 60bb41d..cae42f9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,4 +1,4 @@ -use clap::{ArgGroup, ErrorKind, IntoApp, Parser}; +use clap::{Arg, ArgGroup, ErrorKind}; use uwuify::UwUify; @@ -8,47 +8,100 @@ macro_rules! modifiers_supplied_at_runtime { }; } -#[derive(Parser)] -#[clap(author, version, about, long_about = None)] -#[clap(group(ArgGroup::new("uwu").required(true).args(& ["text", "infile"]),))] -struct Args { - /// Text to uwu'ify - #[clap(short, long, required_unless_present_all = ["infile", "outfile"], display_order = 1)] - text: Option, - - /// The file to uwu'ify - #[clap(short, long, parse(from_os_str), conflicts_with = "text", requires = "outfile", value_name = "FILE", value_hint = clap::ValueHint::FilePath, display_order = 2)] - infile: Option, - - /// The file to output uwu'ified text - #[clap(short, long, value_name = "FILE", value_hint = clap::ValueHint::FilePath, display_order = 3)] - outfile: Option, - - /// The modifier to determine how many words to be uwu'ified - #[clap(short, long, value_name = "VALUE", default_value = "1", validator = is_between_zero_and_one, display_order = 4)] - words: f64, - - /// The modifier for uwu faces e.g hello -> hewwo - #[clap(short, long, value_name = "VALUE", default_value = "0.05", validator = is_between_zero_and_one, display_order = 5)] - faces: f64, - - /// The modifier for actions e.g *shuffles over* - #[clap(short, long, value_name = "VALUE", default_value = "0.125", validator = is_between_zero_and_one, display_order = 6)] - actions: f64, - - /// The modifier for stutters e.g b-baka! - #[clap(short, long, value_name = "VALUE", default_value = "0.225", validator = is_between_zero_and_one, display_order = 7)] - stutters: f64, - - /// Flag to enable/disable random uwu'ifying - #[clap(short, long, display_order = 8)] - random: bool, +macro_rules! app { + () => { + clap::App::new(env!("CARGO_PKG_NAME")) + .author(env!("CARGO_PKG_AUTHORS")) + .version(env!("CARGO_PKG_VERSION")) + .about(env!("CARGO_PKG_DESCRIPTION")) + .long_about(None) + .group( + ArgGroup::new("uwu") + .required(true) + .args(&["text", "infile"]), + ) + .arg( + Arg::new("text") + .help("Text to uwu'ify") + .short('t') + .long("text") + .required_unless_present_all(["infile", "outfile"]) + .display_order(1), + ) + .arg( + Arg::new("infile") + .help("The file to uwu'ify") + .short('i') + .long("infile") + .conflicts_with("text") + .requires("outfile") + .value_name("FILE") + .value_hint(clap::ValueHint::FilePath) + .display_order(2), + ) + .arg( + Arg::new("outfile") + .help("The file to output uwu'ified text") + .short('o') + .long("outfile") + .value_name("FILE") + .value_hint(clap::ValueHint::FilePath) + .display_order(3), + ) + .arg( + Arg::new("words") + .help("The modifier to determine how many words to be uwu'ified") + .short('w') + .long("words") + .value_name("VALUE") + .default_value("1") + .validator(is_between_zero_and_one) + .display_order(4), + ) + .arg( + Arg::new("faces") + .help("The modifier for uwu faces e.g hello -> hewwo") + .short('f') + .long("faces") + .value_name("VALUE") + .default_value("0.05") + .validator(is_between_zero_and_one) + .display_order(5), + ) + .arg( + Arg::new("actions") + .help("The modifier for actions e.g *shuffles over*") + .short('a') + .long("actions") + .value_name("VALUE") + .default_value("0.125") + .validator(is_between_zero_and_one) + .display_order(6), + ) + .arg( + Arg::new("stutters") + .help("The modifier for stutters e.g b-baka!") + .short('s') + .long("stutters") + .value_name("VALUE") + .default_value("0.225") + .validator(is_between_zero_and_one) + .display_order(7), + ) + .arg( + Arg::new("random") + .help("Flag to enable/disable random uwu'ifying") + .short('r') + .long("random") + .display_order(8), + ) + }; } fn main() { - let matches = Args::into_app().get_matches(); + let matches = app!().get_matches(); - let uwuify = UwUify::new( + match UwUify::new( matches.value_of("text"), matches.value_of("infile").map(|f| std::path::Path::new(f)), matches.value_of("outfile"), @@ -57,17 +110,17 @@ fn main() { matches.occurrences_of("actions"), matches.occurrences_of("stutters") ), - matches.value_of_t("words").unwrap_or_else(|e| e.exit()), - matches.value_of_t("faces").unwrap_or_else(|e| e.exit()), - matches.value_of_t("actions").unwrap_or_else(|e| e.exit()), - matches.value_of_t("stutters").unwrap_or_else(|e| e.exit()), - matches.value_of_t("random").unwrap_or_else(|e| e.exit()), - ); - match uwuify.uwuify() { + matches.value_of_t_or_exit("words"), + matches.value_of_t_or_exit("faces"), + matches.value_of_t_or_exit("actions"), + matches.value_of_t_or_exit("stutters"), + matches.is_present("random"), + ) + .uwuify() + { Ok(_) => (), Err(err) => { - let mut app = Args::into_app(); - app.error(ErrorKind::DisplayHelp, err).exit(); + app!().error(ErrorKind::DisplayHelp, err).exit(); } } }