xflags

Moderately simple command line arguments parsing:

```rust 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) } } } ```