Make `Extension` non-exhaustive
[ouch.git] / src / opts.rs
blob1baef3c8362bf3cfa8815553bf2b81e2e2edcbc3
1 use std::path::PathBuf;
3 use clap::{Parser, ValueHint};
5 /// Command line options
6 #[derive(Parser, Debug)]
7 #[clap(version, about)]
8 pub struct Opts {
9     /// Skip [Y/n] questions positively.
10     #[clap(short, long, conflicts_with = "no")]
11     pub yes: bool,
13     /// Skip [Y/n] questions negatively.
14     #[clap(short, long)]
15     pub no: bool,
17     /// Ouch and claps subcommands
18     #[clap(subcommand)]
19     pub cmd: Subcommand,
22 // CAREFUL: this docs can accidentally become part of the --help message if they get too long
23 // this was tested in clap 3.0.0-beta5.
24 /// Repository: https://github.com/ouch-org/ouch
26 // Ouch commands:
27 // - `compress`
28 // - `decompress`
29 // - `list`
31 // Clap commands:
32 //  - `help`
33 #[derive(Parser, PartialEq, Eq, Debug)]
34 pub enum Subcommand {
35     /// Compress one or more files into one output file.
36     #[clap(alias = "c")]
37     Compress {
38         /// Files to be compressed.
39         #[clap(required = true, min_values = 1)]
40         files: Vec<PathBuf>,
42         /// The resulting file. Its extensions can be used to specify the compression formats.
43         #[clap(required = true, value_hint = ValueHint::FilePath)]
44         output: PathBuf,
45     },
46     /// Decompresses one or more files, optionally into another folder.
47     #[clap(alias = "d")]
48     Decompress {
49         /// Files to be decompressed.
50         #[clap(required = true, min_values = 1)]
51         files: Vec<PathBuf>,
53         /// Choose to  files in a directory other than the current
54         #[clap(short = 'd', long = "dir", value_hint = ValueHint::DirPath)]
55         output_dir: Option<PathBuf>,
56     },
57     /// List contents.     Alias: l
58     #[clap(alias = "l")]
59     List {
60         /// Archives whose contents should be listed
61         #[clap(required = true, min_values = 1)]
62         archives: Vec<PathBuf>,
64         /// Show archive contents as a tree
65         #[clap(short, long)]
66         tree: bool,
67     },