summaryrefslogtreecommitdiffstats
path: root/third_party/rust/clap/examples/derive_ref/flatten_hand_args.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
commit36d22d82aa202bb199967e9512281e9a53db42c9 (patch)
tree105e8c98ddea1c1e4784a60a5a6410fa416be2de /third_party/rust/clap/examples/derive_ref/flatten_hand_args.rs
parentInitial commit. (diff)
downloadfirefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz
firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip
Adding upstream version 115.7.0esr.upstream/115.7.0esr
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'third_party/rust/clap/examples/derive_ref/flatten_hand_args.rs')
-rw-r--r--third_party/rust/clap/examples/derive_ref/flatten_hand_args.rs53
1 files changed, 53 insertions, 0 deletions
diff --git a/third_party/rust/clap/examples/derive_ref/flatten_hand_args.rs b/third_party/rust/clap/examples/derive_ref/flatten_hand_args.rs
new file mode 100644
index 0000000000..2969457e18
--- /dev/null
+++ b/third_party/rust/clap/examples/derive_ref/flatten_hand_args.rs
@@ -0,0 +1,53 @@
+use clap::error::Error;
+use clap::{Arg, ArgMatches, Args, Command, FromArgMatches, Parser};
+
+#[derive(Debug)]
+struct CliArgs {
+ foo: bool,
+ bar: bool,
+ quuz: Option<String>,
+}
+
+impl FromArgMatches for CliArgs {
+ fn from_arg_matches(matches: &ArgMatches) -> Result<Self, Error> {
+ Ok(Self {
+ foo: matches.is_present("foo"),
+ bar: matches.is_present("bar"),
+ quuz: matches.value_of("quuz").map(|quuz| quuz.to_owned()),
+ })
+ }
+ fn update_from_arg_matches(&mut self, matches: &ArgMatches) -> Result<(), Error> {
+ self.foo |= matches.is_present("foo");
+ self.bar |= matches.is_present("bar");
+ if let Some(quuz) = matches.value_of("quuz") {
+ self.quuz = Some(quuz.to_owned());
+ }
+ Ok(())
+ }
+}
+
+impl Args for CliArgs {
+ fn augment_args(cmd: Command<'_>) -> Command<'_> {
+ cmd.arg(Arg::new("foo").short('f').long("foo"))
+ .arg(Arg::new("bar").short('b').long("bar"))
+ .arg(Arg::new("quuz").short('q').long("quuz").takes_value(true))
+ }
+ fn augment_args_for_update(cmd: Command<'_>) -> Command<'_> {
+ cmd.arg(Arg::new("foo").short('f').long("foo"))
+ .arg(Arg::new("bar").short('b').long("bar"))
+ .arg(Arg::new("quuz").short('q').long("quuz").takes_value(true))
+ }
+}
+
+#[derive(Parser, Debug)]
+struct Cli {
+ #[clap(short, long)]
+ top_level: bool,
+ #[clap(flatten)]
+ more_args: CliArgs,
+}
+
+fn main() {
+ let args = Cli::parse();
+ println!("{:#?}", args);
+}