1 // Copyright (c) 2022 Google LLC All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4
5 use {argh::FromArgs, std::fmt::Debug};
6
7 #[derive(FromArgs, PartialEq, Debug)]
8 /// Top-level command.
9 struct TopLevel {
10 #[argh(subcommand)]
11 nested: MySubCommandEnum,
12 }
13
14 #[derive(FromArgs, PartialEq, Debug)]
15 #[argh(subcommand)]
16 enum MySubCommandEnum {
17 One(SubCommandOne),
18 Two(SubCommandTwo),
19 }
20
21 #[derive(FromArgs, PartialEq, Debug)]
22 /// First subcommand.
23 #[argh(subcommand, name = "one")]
24 struct SubCommandOne {
25 #[argh(option)]
26 /// how many x
27 x: usize,
28 }
29
30 #[derive(FromArgs, PartialEq, Debug)]
31 /// Second subcommand.
32 #[argh(subcommand, name = "two")]
33 struct SubCommandTwo {
34 #[argh(switch)]
35 /// whether to fooey
36 fooey: bool,
37 }
38
main()39 fn main() {
40 let toplevel: TopLevel = argh::from_env();
41 println!("{:#?}", toplevel);
42 }
43