14 releases (6 breaking)

0.7.2 Nov 25, 2024
0.7.1 Nov 23, 2024
0.6.0 Nov 21, 2024
0.5.1 Nov 21, 2024
0.1.2 Jul 23, 2023

#461 in Command-line interface

Download history 1/week @ 2024-09-17 495/week @ 2024-09-24 156/week @ 2024-10-01 32/week @ 2024-10-08 13/week @ 2024-10-15 5/week @ 2024-10-29 14/week @ 2024-11-05 1/week @ 2024-11-12 944/week @ 2024-11-19 129/week @ 2024-11-26

1,093 downloads per month

GPL-3.0-or-later

18KB
232 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

~240–690KB
~16K SLoC