1pub mod api;
2mod common_args;
3mod config;
4pub(crate) mod detect;
5mod edit_distance;
6mod errors;
7mod subcommands;
8mod tasks;
9pub mod util;
10pub mod version;
11
12use std::process::ExitCode;
13
14use clap::{ArgMatches, Command};
15
16pub use config::Config;
17use spacetimedb_paths::{RootDir, SpacetimePaths};
18pub use subcommands::*;
19pub use tasks::build;
20
21pub fn get_subcommands() -> Vec<Command> {
22 vec![
23 publish::cli(),
24 delete::cli(),
25 logs::cli(),
26 call::cli(),
27 describe::cli(),
28 energy::cli(),
29 sql::cli(),
30 dns::cli(),
31 generate::cli(),
32 list::cli(),
33 login::cli(),
34 logout::cli(),
35 init::cli(),
36 build::cli(),
37 server::cli(),
38 subscribe::cli(),
39 start::cli(),
40 subcommands::version::cli(),
41 ]
42}
43
44pub async fn exec_subcommand(
45 config: Config,
46 paths: &SpacetimePaths,
47 root_dir: Option<&RootDir>,
48 cmd: &str,
49 args: &ArgMatches,
50) -> anyhow::Result<ExitCode> {
51 match cmd {
52 "call" => call::exec(config, args).await,
53 "describe" => describe::exec(config, args).await,
54 "energy" => energy::exec(config, args).await,
55 "publish" => publish::exec(config, args).await,
56 "delete" => delete::exec(config, args).await,
57 "logs" => logs::exec(config, args).await,
58 "sql" => sql::exec(config, args).await,
59 "rename" => dns::exec(config, args).await,
60 "generate" => generate::exec(config, args).await,
61 "list" => list::exec(config, args).await,
62 "init" => init::exec(config, args).await,
63 "build" => build::exec(config, args).await.map(drop),
64 "server" => server::exec(config, paths, args).await,
65 "subscribe" => subscribe::exec(config, args).await,
66 "start" => return start::exec(paths, args).await,
67 "login" => login::exec(config, args).await,
68 "logout" => logout::exec(config, args).await,
69 "version" => return subcommands::version::exec(paths, root_dir, args).await,
70 unknown => Err(anyhow::anyhow!("Invalid subcommand: {}", unknown)),
71 }
72 .map(|()| ExitCode::SUCCESS)
73}