Combinatoric example

```no_run
#[derive(Debug, Clone)]
pub struct Options {
    verbosity: usize,
}

pub fn options() -> OptionParser<Options> {
    let verbosity = short('v')
        .long("verbose")
        .help("Increase the verbosity level")
        .req_flag(())
        .count();

    construct!(Options { verbosity }).to_options()
}

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


Derive example

```no_run
#[derive(Debug, Clone, Bpaf)]
#[bpaf(options)]
pub struct Options {
    /// Increase the verbosity level
    #[bpaf(short('v'), long("verbose"), req_flag(()), count)]
    verbosity: usize,
}

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


Output

In `--help` message `req_flag` look similarly to [`switch`](NamedArg::switch) and
[`flag`](NamedArg::flag)

$ app --help

Usage: app [-v]...

Available options:

-v, --verbose

Increase the verbosity level

-h, --help

Prints help information

Since parser uses `req_flag` it succeeds exactly 0 times if there's no parameters

$ app 
Options { verbosity: 0 }

If it was specified - `count` tracks it a discards parsed values

$ app -vvv
Options { verbosity: 3 }

$ app --verbose --verbose
Options { verbosity: 2 }

