[][src]Crate 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 ok_or_else 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:

cargo run --example tour
let args = argwerk::parse! {
    /// A simple test command.
    ///
    /// This is nice!
    "testcommand [-h]" {
        help: bool,
        file: Option<String>,
        limit: usize = 42,
        positional: Option<(String, Option<String>)>,
        rest: Vec<String>,
    }
    /// 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;
        print_help();
        Ok(())
    }
    /// Limit the number of things by <n>.
    "--limit" | "-l", n => {
        limit = str::parse(&n)?;
        Ok(())
    }
    /// Write to the file specified by <path>.
    "--file", path if !file.is_some() => {
        file = Some(path);
        Ok(())
    }
    /// Takes argument at <foo> and <bar>.
    ///
    ///    * 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);

Macros

parse

Parse commandline arguments.

Structs

Error

An error raised by argwerk.

Help

Helper for construct help text.

Enums

ErrorKind

The kind of an error.

Functions

doc

Helper utility for building documentation.