spacetimedb_cli/
lib.rs

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}