]> git.proxmox.com Git - rustc.git/blame - vendor/structopt/examples/rename_all.rs
New upstream version 1.62.1+dfsg1
[rustc.git] / vendor / structopt / examples / rename_all.rs
CommitLineData
f20569fa
XL
1//! Example on how the `rename_all` parameter works.
2//!
3//! `rename_all` can be used to override the casing style used during argument
4//! generation. By default the `kebab-case` style will be used but there are a wide
5//! variety of other styles available.
6//!
7//! ## Supported styles overview:
8//!
9//! - **Camel Case**: Indicate word boundaries with uppercase letter, excluding
10//! the first word.
11//! - **Kebab Case**: Keep all letters lowercase and indicate word boundaries
12//! with hyphens.
13//! - **Pascal Case**: Indicate word boundaries with uppercase letter,
14//! including the first word.
15//! - **Screaming Snake Case**: Keep all letters uppercase and indicate word
16//! boundaries with underscores.
17//! - **Snake Case**: Keep all letters lowercase and indicate word boundaries
18//! with underscores.
19//! - **Verbatim**: Use the original attribute name defined in the code.
20//!
21//! - **Lower Case**: Keep all letters lowercase and remove word boundaries.
22//!
23//! - **Upper Case**: Keep all letters upperrcase and remove word boundaries.
24
25use structopt::StructOpt;
26
27#[derive(StructOpt, Debug)]
28#[structopt(name = "rename_all", rename_all = "screaming_snake_case")]
29enum Opt {
30 // This subcommand will be named `FIRST_COMMAND`. As the command doesn't
31 // override the initial casing style, ...
32 /// A screaming loud first command. Only use if necessary.
33 FirstCommand {
34 // this flag will be available as `--FOO` and `-F`.
35 /// This flag will even scream louder.
36 #[structopt(long, short)]
37 foo: bool,
38 },
39
40 // As we override the casing style for this variant the related subcommand
41 // will be named `SecondCommand`.
42 /// Not nearly as loud as the first command.
43 #[structopt(rename_all = "pascal_case")]
44 SecondCommand {
45 // We can also override it again on a single field.
46 /// Nice quiet flag. No one is annoyed.
47 #[structopt(rename_all = "snake_case", long)]
48 bar_option: bool,
49
50 // Renaming will not be propagated into subcommand flagged enums. If
51 // a non default casing style is required it must be defined on the
52 // enum itself.
53 #[structopt(subcommand)]
54 cmds: Subcommands,
55
56 // or flattened structs.
57 #[structopt(flatten)]
58 options: BonusOptions,
59 },
60}
61
62#[derive(StructOpt, Debug)]
63enum Subcommands {
64 // This one will be available as `first-subcommand`.
65 FirstSubcommand,
66}
67
68#[derive(StructOpt, Debug)]
69struct BonusOptions {
70 // And this one will be available as `baz-option`.
71 #[structopt(long)]
72 baz_option: bool,
73}
74
75fn main() {
76 let opt = Opt::from_args();
77 println!("{:?}", opt);
78}