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 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}