
```no_run
use bpaf::doc::*;
use bpaf::*;
#[derive(Debug, Clone)]
pub struct Rectangle {
    width: u32,
    height: u32,
}

#[derive(Debug, Clone)]
pub struct Options {
    argument: u32,
    rectangle: Rectangle,
}

fn generate_rectangle_help(meta: MetaInfo) -> Doc {
    let mut buf = Doc::default();
    buf.text("The app takes a rectangle defined by width and height\n\nYou can customize the screen size using ");
    buf.meta(meta, true);
    buf.text(" parameters");
    buf
}

pub fn options() -> OptionParser<Options> {
    let argument = long("argument")
        .help("important argument")
        .argument("ARG")
        .fallback(30);
    let width = long("width")
        .help("Width of the rectangle")
        .argument("W")
        .fallback(10);
    let height = long("height")
        .help("Height of the rectangle")
        .argument("H")
        .fallback(10);
    let rectangle =
        construct!(Rectangle { width, height }).with_group_help(generate_rectangle_help);

    construct!(Options {
        argument,
        rectangle
    })
    .to_options()
}

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


Output

`with_group_help` lets you write longer description for group of options that can also refer to
those options. Similar to [`group_help`](Parser::group_help) encased optios are separated from
the rest by a blank line.

Invoking help with a single `--help` flag renders shot(er) version of the help message
that contanis only the first paragraph for each block:

$ app --help

Usage: app [--argument=ARG] [--width=W] [--height=H]

The app takes a rectangle defined by width and height
 You can customize the screen size using [--width=W] [--height=H] parameters

    --width=W

Width of the rectangle

    --height=H

Height of the rectangle

Available options:

    --argument=ARG

important argument

-h, --help

Prints help information

Invoking help with double `--help --help` flag renders the full help message with all the
descriptions added

$ app --help --help

Usage: app [--argument=ARG] [--width=W] [--height=H]

The app takes a rectangle defined by width and height
 You can customize the screen size using [--width=W] [--height=H] parameters

    --width=W

Width of the rectangle

    --height=H

Height of the rectangle

Available options:

    --argument=ARG

important argument

-h, --help

Prints help information

Other than rendering the help message that there's no interactions with other parsers

$ app --width 120 --height 11
Options { argument: 30, rectangle: Rectangle { width: 120, height: 11 } }

$ app --argument 12
Options { argument: 12, rectangle: Rectangle { width: 10, height: 10 } }

