#arguments-parser #gnu #pair #flags #syntax #complete #gnu-style

argsyn

A complete implementation of GNU-style argument syntax

12 releases (6 breaking)

new 0.7.0 Nov 21, 2024
0.6.0 Nov 21, 2024
0.5.1 Nov 21, 2024
0.4.0 Nov 21, 2024
0.1.2 Jul 23, 2023

#10 in #gnu

28 downloads per month

GPL-3.0-or-later

16KB
187 lines

argsyn, an Argument Parser for GNU-style Syntax

This crate provides a complete implementation of GNU-style argument parsing as described at
https://www.gnu.org/software/libc/manual/html_node/Argument-Syntax.html

Arguments are converted into basics, flags, pairs, and a few other types according to the GNU-style. Here is a visual example of how a sequence of arguments is converted with "xy" specified as short pairs:

$ program arg1 -abcx12 -y 3 --long --key=value - arg2 -- -kh --ignore
  |       |     ||||    |     |      |         | |    |  |   |
  Basic(program)||||    |     |      |         | |    |  Basic(-kh)
          Basic(arg1)   |     |      |         | |    |      Basic(--ignore)
                Flag(a) |     |      |         | |    |
                 Flag(b)|     |      |         | |    |
                  Flag(c)     |      |         | |    |
                   Pair(x,12) |      |         | |    |
                        Pair(y,3)    |         | |    |
                              Flag(long)       | |    |
                                     Pair(key,value)  |
                                               Stdin  |
                                                 Basic(arg2)
                                                      Done

In Rust, to print all arguments parsed, it is as simple as:

for opt in std::env::args().opts("xy").unwrap() {
  println!("{:?}", opt.simplify());
}

Dependencies

~265–720KB
~17K SLoC