argwerk

Documentation Crates Actions Status

Helper utility for parsing simple commandline arguments.

This is not intended to be a complete commandline parser library. Instead this can be used as an alternative quick-and-dirty approach that can be cheaply incorporated into a tool.

We provide: * A dependency-free commandline parsing framework using declarative macros. So it's hopefully lightweight and compiles quickly. * A flexible mechanism for parsing. * Formatting decent looking help messages.

We specifically do not support: * As-close-to correct line wrapping with wide unicode characters as possible (see [textwrap]). * Required arguments. If your argument is required, you'll have to [okorelse] it yourself from an Option<T>. * Complex command structures like subcommands.

For a more complete commandline parsing library, use [clap].

See the documentation for [argwerk::parse!] for how to use.

Examples

This is available as a runnable example: sh cargo run --example tour

```rust let args = argwerk::parse! { /// A simple test command. /// /// This is nice! "command [-h]" { help: bool, file: Option, input: Option, limit: usize = 42, positional: Option<(String, Option)>, rest: Vec, } /// Prints the help. /// /// This includes: /// * All the available switches. /// * All the available positional arguments. /// * Whatever else the developer decided to put in here! We even support wrapping comments which are overly long. "-h" | "--help" => { help = true; printhelp(); Ok(()) } /// Limit the number of things by . "--limit" | "-l", n => { limit = str::parse(&n)?; Ok(()) } /// Write to the file specified by . "--file", path if !file.issome() => { file = Some(path); Ok(()) } /// Read from the specified input. "--input", #[option] path => { input = path; Ok(()) } /// Takes argument at and . /// /// * This is an indented message. The first alphanumeric character determines the indentation to use. (foo, #[option] bar, #[rest] args) if positional.is_none() => { positional = Some((foo, bar)); rest = args; Ok(()) } }?;

dbg!(args); ```

License: MIT/Apache-2.0