/yafp

Non-POSIX cli flag parser with imperative style flag declaration instead of the usual declarative style.

Primary LanguageRustMIT LicenseMIT

yafp

Build Status Crates.io Documentation Rust 2021

yafp is a non-POSIX cli flag parser with imperative style flag declaration instead of the usual declarative style.

Features:

  • Help generation.
  • Imperative flag declaration with usage text.
  • Supports boolean flags, false by default and true if set.
  • Supports required and optional value flags.
  • Values parsed to assigned variable type.

Limitations:

  • Only supports short flag style.
  • Does not support flag combination, for example, -fd is not -f and -d and is instead a single flag.
  • Non-UTF8 arguments are not supported.

Usage

use yafp::Parser;

fn main() {
    let mut parser = Parser::from_env();
    
    // Declare flags.
    parser.bool_flag("verbose", "this is used to get verbose output");
    parser.required_flag("url", "this is a required flag");
    parser.required_flag("workers", "this is an optional flag");

    // finalize() must be called before accessing arguments.
    // Unbound args are returned if any.
    //
    // An error is returned if there is a parsing error.
    let result = parser.finalize();
    let remaining = match result {
        Ok(remaining) => remaining,
        Err(e) => {
            println!("{}: {}", parser.command, e);
            exit(1);
        }
    };
    
    // yafp parses values to the correct type.
    let verbose: bool = parser.get_value("verbose").unwrap();
    
    //...
}

License

MIT