
```no_run
use bpaf::*;

#[derive(Debug, Clone)]
pub struct Options {
    argument: Vec<u32>,
    switches: Vec<bool>,
}

pub fn options() -> OptionParser<Options> {
    let argument = long("argument")
        .help("important argument")
        .argument("ARG")
        .many();
    let switches = long("switch").help("some switch").switch().many();
    construct!(Options { argument, switches }).to_options()
}

fn main() {
    println!("{:?}", options().run())
}
```


Output

Help message describes all the parser combined

$ app --help

Usage: app [--argument=ARG]... [--switch]...

Available options:

    --argument=ARG

important argument

    --switch

some switch

-h, --help

Prints help information

And users can pass any combinations of options, resulting parser will handle them as long as they are valid

$ app --argument 10 --argument 20
Options { argument: [10, 20], switches: [false] }

$ app --switch
Options { argument: [], switches: [true] }

$ app --switch --switch --argument 20
Options { argument: [20], switches: [true, true] }

