Merge pull request #253 from Crypto-Spartan/update-dependencies
[ouch.git] / src / opts.rs
blobe33fbdcc47f3edd755921683c3dbcf1eebdc8c36
1 use std::path::PathBuf;
3 use clap::{Parser, ValueHint};
5 // Command line options
6 /// A command-line utility for easily compressing and decompressing files and directories.
7 ///
8 /// Supported formats: tar, zip, bz/bz2, gz, lz4, xz/lz/lzma, zst.
9 ///
10 /// Repository: https://github.com/ouch-org/ouch
11 #[derive(Parser, Debug)]
12 #[clap(about, version)]
13 pub struct Opts {
14     /// Skip [Y/n] questions positively.
15     #[clap(short, long, conflicts_with = "no", global = true)]
16     pub yes: bool,
18     /// Skip [Y/n] questions negatively.
19     #[clap(short, long, global = true)]
20     pub no: bool,
22     /// Activate accessibility mode, reducing visual noise
23     #[clap(short = 'A', long, env = "ACCESSIBLE", global = true)]
24     pub accessible: bool,
26     /// Ignores hidden files
27     #[clap(short = 'H', long)]
28     pub hidden: bool,
30     /// Ignores files matched by git's ignore files
31     #[clap(short = 'g', long)]
32     pub gitignore: bool,
34     /// Ouch and claps subcommands
35     #[clap(subcommand)]
36     pub cmd: Subcommand,
39 // CAREFUL: this docs can accidentally become part of the --help message if they get too long
40 // this was tested in clap 3.0.0-beta5.
41 /// Repository: https://github.com/ouch-org/ouch
43 // Ouch commands:
44 // - `compress`
45 // - `decompress`
46 // - `list`
48 // Clap commands:
49 //  - `help`
50 #[derive(Parser, PartialEq, Eq, Debug)]
51 pub enum Subcommand {
52     /// Compress one or more files into one output file.
53     #[clap(alias = "c")]
54     Compress {
55         /// Files to be compressed.
56         #[clap(required = true, min_values = 1)]
57         files: Vec<PathBuf>,
59         /// The resulting file. Its extensions can be used to specify the compression formats.
60         #[clap(required = true, value_hint = ValueHint::FilePath)]
61         output: PathBuf,
62     },
63     /// Decompresses one or more files, optionally into another folder.
64     #[clap(alias = "d")]
65     Decompress {
66         /// Files to be decompressed.
67         #[clap(required = true, min_values = 1)]
68         files: Vec<PathBuf>,
70         /// Choose to  files in a directory other than the current
71         #[clap(short = 'd', long = "dir", value_hint = ValueHint::DirPath)]
72         output_dir: Option<PathBuf>,
73     },
74     /// List contents.     Alias: l
75     #[clap(alias = "l")]
76     List {
77         /// Archives whose contents should be listed
78         #[clap(required = true, min_values = 1)]
79         archives: Vec<PathBuf>,
81         /// Show archive contents as a tree
82         #[clap(short, long)]
83         tree: bool,
84     },