libwally/commands/
mod.rs

1mod init;
2mod install;
3mod login;
4mod logout;
5mod manifest_to_json;
6mod package;
7mod publish;
8mod search;
9mod update;
10
11pub use init::InitSubcommand;
12pub use install::InstallSubcommand;
13pub use login::LoginSubcommand;
14pub use logout::LogoutSubcommand;
15pub use manifest_to_json::ManifestToJsonSubcommand;
16pub use package::PackageSubcommand;
17pub use publish::PublishSubcommand;
18pub use search::SearchSubcommand;
19pub use update::UpdateSubcommand;
20
21use structopt::StructOpt;
22
23#[derive(Debug, StructOpt)]
24#[structopt(about = env!("CARGO_PKG_DESCRIPTION"))]
25pub struct Args {
26    #[structopt(flatten)]
27    pub global: GlobalOptions,
28
29    #[structopt(subcommand)]
30    pub subcommand: Subcommand,
31}
32
33impl Args {
34    pub fn run(self) -> anyhow::Result<()> {
35        match self.subcommand {
36            Subcommand::Publish(subcommand) => subcommand.run(self.global),
37            Subcommand::Init(subcommand) => subcommand.run(),
38            Subcommand::Login(subcommand) => subcommand.run(),
39            Subcommand::Logout(subcommand) => subcommand.run(),
40            Subcommand::Update(subcommand) => subcommand.run(),
41            Subcommand::Search(subcommand) => subcommand.run(),
42            Subcommand::Package(subcommand) => subcommand.run(),
43            Subcommand::Install(subcommand) => subcommand.run(self.global),
44            Subcommand::ManifestToJson(subcommand) => subcommand.run(),
45        }
46    }
47}
48
49/// Options that apply to all subcommands for the CLI.
50#[derive(Debug, StructOpt)]
51pub struct GlobalOptions {
52    /// Enable more verbose logging. Can be specified multiple times to increase
53    /// verbosity further.
54    #[structopt(global = true, parse(from_occurrences), long = "verbose", short)]
55    pub verbosity: u8,
56
57    /// Flag to indidate if we will be using a test registry. Usable only by tests.
58    #[structopt(skip)]
59    pub test_registry: bool,
60
61    /// Specify if the package index should be temporary (to prevent multiple use conflicts). Usable only by tests.
62    #[structopt(skip)]
63    pub use_temp_index: bool,
64}
65
66impl Default for GlobalOptions {
67    fn default() -> Self {
68        Self {
69            verbosity: 0,
70            test_registry: false,
71            use_temp_index: false,
72        }
73    }
74}
75
76#[derive(Debug, StructOpt)]
77pub enum Subcommand {
78    Init(InitSubcommand),
79    Install(InstallSubcommand),
80    Update(UpdateSubcommand),
81    Publish(PublishSubcommand),
82    Login(LoginSubcommand),
83    Logout(LogoutSubcommand),
84    Search(SearchSubcommand),
85    Package(PackageSubcommand),
86    ManifestToJson(ManifestToJsonSubcommand),
87}