@@ -7,7 +7,7 @@ mod list;
7
7
mod mount;
8
8
9
9
use anyhow:: Result ;
10
- use clap:: Parser ;
10
+ use clap:: { CommandFactory , Parser } ;
11
11
use log:: error;
12
12
use std:: process:: ExitCode ;
13
13
@@ -18,8 +18,24 @@ struct Cli {
18
18
#[ arg( short, long, action=clap:: ArgAction :: Count , global=true ) ]
19
19
verbose : u8 ,
20
20
21
+ #[ arg(
22
+ long,
23
+ num_args= 0 ..=1 ,
24
+ default_missing_value = "" ,
25
+ help_heading = "Advanced" ,
26
+ value_parser( [
27
+ "create" ,
28
+ "list" ,
29
+ "dump" ,
30
+ "extract" ,
31
+ #[ cfg( not( windows) ) ]
32
+ "mount"
33
+ ] )
34
+ ) ]
35
+ generate_man_page : Option < String > ,
36
+
21
37
#[ command( subcommand) ]
22
- command : Commands ,
38
+ command : Option < Commands > ,
23
39
}
24
40
25
41
#[ derive( clap:: Subcommand , Debug ) ]
@@ -64,13 +80,32 @@ fn run() -> Result<()> {
64
80
let args = Cli :: parse ( ) ;
65
81
configure_log ( args. verbose ) ;
66
82
83
+ if let Some ( what) = args. generate_man_page {
84
+ let command = match what. as_str ( ) {
85
+ "" => Cli :: command ( ) ,
86
+ "create" => create:: Options :: command ( ) ,
87
+ "list" => list:: Options :: command ( ) ,
88
+ "dump" => dump:: Options :: command ( ) ,
89
+ "extract" => extract:: Options :: command ( ) ,
90
+ #[ cfg( not( windows) ) ]
91
+ "mount" => mount:: Options :: command ( ) ,
92
+ _ => return Ok ( Cli :: command ( ) . print_help ( ) ?) ,
93
+ } ;
94
+ let man = clap_mangen:: Man :: new ( command) ;
95
+ man. render ( & mut std:: io:: stdout ( ) ) ?;
96
+ return Ok ( ( ) ) ;
97
+ }
98
+
67
99
match args. command {
68
- Commands :: Create ( options) => create:: create ( options) ,
69
- Commands :: List ( options) => Ok ( list:: list ( options) ?) ,
70
- Commands :: Dump ( options) => Ok ( dump:: dump ( options) ?) ,
71
- Commands :: Extract ( options) => Ok ( extract:: extract ( options) ?) ,
72
- #[ cfg( not( windows) ) ]
73
- Commands :: Mount ( options) => Ok ( mount:: mount ( options) ?) ,
100
+ None => Ok ( Cli :: command ( ) . print_help ( ) ?) ,
101
+ Some ( c) => match c {
102
+ Commands :: Create ( options) => create:: create ( options) ,
103
+ Commands :: List ( options) => Ok ( list:: list ( options) ?) ,
104
+ Commands :: Dump ( options) => Ok ( dump:: dump ( options) ?) ,
105
+ Commands :: Extract ( options) => Ok ( extract:: extract ( options) ?) ,
106
+ #[ cfg( not( windows) ) ]
107
+ Commands :: Mount ( options) => Ok ( mount:: mount ( options) ?) ,
108
+ } ,
74
109
}
75
110
}
76
111
0 commit comments