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