hop_cli/commands/
mod.rs

1pub mod auth;
2mod channels;
3mod completions;
4pub mod containers;
5pub mod deploy;
6mod domains;
7mod gateways;
8pub mod ignite;
9mod link;
10mod oops;
11mod payment;
12pub mod projects;
13mod secrets;
14mod tunnel;
15pub mod update;
16mod volumes;
17mod webhooks;
18mod whoami;
19
20use anyhow::Result;
21use clap::Subcommand;
22use ignite::from_compose;
23use volumes::backup;
24
25use crate::state::State;
26
27#[derive(Debug, Subcommand)]
28pub enum Commands {
29    Auth(auth::Options),
30    #[clap(alias = "project")]
31    Projects(projects::Options),
32    #[clap(alias = "secret")]
33    Secrets(secrets::Options),
34    Deploy(deploy::Options),
35    #[clap(alias = "info", alias = "ctx")]
36    Whoami(whoami::Options),
37    Ignite(ignite::Options),
38    Link(link::Options),
39    #[cfg(feature = "update")]
40    Update(update::Options),
41    #[clap(alias = "container", alias = "cts")]
42    Containers(containers::Options),
43    #[clap(alias = "gateway")]
44    Gateways(gateways::Options),
45    #[clap(alias = "domain")]
46    Domains(domains::Options),
47    #[clap(alias = "complete", hide = cfg!(not(feature = "update")))]
48    Completions(completions::Options),
49    #[clap(alias = "channel", alias = "ch")]
50    Channels(channels::Options),
51    Oops(oops::Options),
52    #[clap(
53        alias = "payments",
54        alias = "finance",
55        alias = "finances",
56        alias = "billing"
57    )]
58    Payment(payment::Options),
59    #[clap(alias = "fwd", alias = "forward")]
60    Tunnel(tunnel::Options),
61    #[clap(alias = "volume", alias = "v")]
62    Volumes(volumes::Options),
63    #[clap(alias = "webhook", alias = "wh")]
64    Webhooks(webhooks::Options),
65    #[clap(alias = "compose")]
66    FromCompose(from_compose::Options),
67    Backup(backup::Options),
68}
69
70pub async fn handle_command(command: Commands, mut state: State) -> Result<()> {
71    match command {
72        Commands::Auth(options) => auth::handle(options, state).await,
73        #[cfg(feature = "update")]
74        Commands::Update(options) => update::handle(options, state).await,
75        Commands::Completions(options) => {
76            completions::handle(options, state);
77            Ok(())
78        }
79
80        authorized_command => {
81            // login so these commands can run
82            state.login(None).await?;
83
84            match authorized_command {
85                Commands::Auth(_) | Commands::Completions(_) => {
86                    unreachable!()
87                }
88
89                #[cfg(feature = "update")]
90                Commands::Update(_) => unreachable!(),
91
92                Commands::Channels(options) => channels::handle(options, state).await,
93                Commands::Projects(options) => projects::handle(options, state).await,
94                Commands::Secrets(options) => secrets::handle(options, state).await,
95                Commands::Deploy(options) => deploy::handle(options, state).await,
96                Commands::Whoami(options) => whoami::handle(&options, state),
97                Commands::Ignite(options) => ignite::handle(options, state).await,
98                Commands::Link(options) => link::handle(options, state).await,
99                Commands::Containers(options) => containers::handle(options, state).await,
100                Commands::Gateways(options) => gateways::handle(options, state).await,
101                Commands::Domains(options) => domains::handle(options, state).await,
102                Commands::Oops(options) => oops::handle(&options, state).await,
103                Commands::Tunnel(options) => tunnel::handle(&options, state).await,
104                Commands::FromCompose(options) => from_compose::handle(options, state).await,
105                Commands::Payment(options) => payment::handle(options, state).await,
106                Commands::Volumes(options) => volumes::handle(options, state).await,
107                Commands::Backup(options) => backup::handle(options, state).await,
108                Commands::Webhooks(options) => webhooks::handle(options, state).await,
109            }
110        }
111    }
112}