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#[derive(Debug, StructOpt)]
51pub struct GlobalOptions {
52 #[structopt(global = true, parse(from_occurrences), long = "verbose", short)]
55 pub verbosity: u8,
56
57 #[structopt(skip)]
59 pub test_registry: bool,
60
61 #[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}