use clap::{arg, command, Arg, ArgAction};
pub struct Options {
pub verbose: bool,
pub inplace: bool,
pub input_file: String,
pub width: usize,
}
pub fn parse_options() -> Options {
let matches = command!() .arg(
Arg::new("inplace")
.short('i')
.long("in-place")
.help("Write to the input file after formatting")
.action(ArgAction::SetTrue),
)
.arg(
Arg::new("max-width")
.long("max-width")
.num_args(1)
.default_value("80")
.help("The column limit to be used"),
)
.arg(
Arg::new("verbose")
.long("verbose")
.help("Print debug logs")
.action(ArgAction::SetTrue),
)
.arg(arg!([file] "Target file").required(true))
.get_matches();
let verbose = matches.get_flag("verbose");
let inplace = matches.get_flag("inplace");
let input_file: &String = matches.get_one("file").expect("No input file provided");
let width = matches
.get_one("max-width")
.cloned()
.map(|s: String| s.parse::<usize>().ok())
.flatten()
.unwrap_or(80);
Options {
verbose,
inplace,
input_file: input_file.clone(),
width,
}
}