= xflags
Moderately simple command line arguments parsing:
mod flags {
#![allow(unused)]
xflags::args_parser! {
/// Prints a greeting.
cmd hello
/// Whom to greet.
required name: String
{
/// Use non-ascii symbols in the output.
optional -e, --emoji
}
}
// generated start
// The following code is generated by `xflags` macro.
// Run `env XFLAGS_DUMP= cargo build` to regenerate.
#[derive(Debug)]
pub struct Hello {
pub name: String,
pub emoji: bool,
}
impl Hello {
pub const HELP: &'static str = Self::_HELP;
pub fn from_env() -> xflags::Result<Self> {
let mut p = xflags::rt::Parser::new_from_env();
Self::_parse(&mut p)
}
pub fn from_vec(args: Vec<std::ffi::OsString>) -> xflags::Result<Self> {
let mut p = xflags::rt::Parser::new(args);
Self::_parse(&mut p)
}
}
// generated end
}
fn main() {
match flags::Hello::from_env() {
Ok(flags) => {
let bang = if flags.emoji { "❣️" } else { "!" };
println!("Hello {}{}", flags.name, bang);
}
Err(err) => {
eprintln!("{}\n\n{}", err, flags::Hello::HELP);
std::process::exit(1)
}
}
}