
```no_run
#[derive(Debug, Clone, Bpaf)]
#[bpaf(options)]
pub enum Options {
    File {
        /// Read input from a file
        name: String,
    },

    Url {
        /// Read input from URL
        url: String,
        /// Authentication method to use for the URL
        auth_method: String,
    },
}

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


Output

Help message reflects mutually exclusive parts

$ app --help

Usage: app (--name=ARG | --url=ARG --auth-method=ARG)

Available options:

    --name=ARG

Read input from a file

    --url=ARG

Read input from URL

    --auth-method=ARG

Authentication method to use for the URL

-h, --help

Prints help information

At least one branch needs to succeed

$ app 
Error: expected --name=ARG or --url=ARG, pass --help for usage information

And in this example only one branch can succeed

$ app --name Cargo.toml
File { name: "Cargo.toml" }

$ app --url https://crates.io --auth-method digest
Url { url: "https://crates.io", auth_method: "digest" }

While both branches can succeed at once - only one will actually succeed and afetr that
parsing fails since there are unconsumed items

$ app --url https://crates.io --auth-method digest --name Cargo.toml
Error: --name cannot be used at the same time as --url

