MCPcopy Create free account
hub / github.com/clockworklabs/SpacetimeDB / exec

Function exec

crates/cli/src/subcommands/delete.rs:34–88  ·  view source on GitHub ↗
(mut config: Config, args: &ArgMatches)

Source from the content-addressed store, hash-verified

32}
33
34pub async fn exec(mut config: Config, args: &ArgMatches) -> Result<(), anyhow::Error> {
35 let server_from_cli = args.get_one::<String>("server").map(|s| s.as_ref());
36 let no_config = args.get_flag("no_config");
37 let database_arg = args.get_one::<String>("database").map(|s| s.as_str());
38 let config_targets = load_config_db_targets(no_config)?;
39 let resolved = resolve_database_arg(
40 database_arg,
41 config_targets.as_deref(),
42 "spacetime delete [database] [--no-config]",
43 )?;
44 let server = server_from_cli.or(resolved.server.as_deref());
45 let force = args.get_flag("force");
46
47 let identity = database_identity(&config, &resolved.database, server).await?;
48 let delete_target = if resolved.database == identity.to_string() {
49 identity.to_string()
50 } else {
51 format!("{} ({identity})", resolved.database)
52 };
53
54 if !y_or_n(
55 force,
56 &format!("Are you sure you want to delete database {delete_target}? This action cannot be undone."),
57 )? {
58 println!("Aborting");
59 return Ok(());
60 }
61
62 let host_url = config.get_host_url(server)?;
63 let request_path = format!("{host_url}/v1/database/{identity}");
64 let auth_header = get_auth_header(&mut config, false, server, !force).await?;
65 let client = reqwest::Client::new();
66
67 let response = send_request(&client, &request_path, &auth_header, None).await?;
68 match response.status() {
69 StatusCode::PRECONDITION_REQUIRED => {
70 let confirm = response.json::<DatabaseDeleteConfirmationResponse>().await?;
71 println!("WARNING: Deleting the database {identity} will also delete its children!");
72 if !force {
73 print_database_tree_info(&confirm.database_tree).await?;
74 }
75 if force || y_or_n(false, "Do you want to proceed deleting above databases?")? {
76 send_request(&client, &request_path, &auth_header, Some(confirm.confirmation_token))
77 .await?
78 .error_for_status()?;
79 } else {
80 println!("Aborting");
81 }
82
83 Ok(())
84 }
85 StatusCode::OK => Ok(()),
86 _ => response.error_for_status().map(drop).map_err(Into::into),
87 }
88}
89
90async fn send_request(
91 client: &reqwest::Client,

Callers

nothing calls this directly

Calls 15

load_config_db_targetsFunction · 0.85
resolve_database_argFunction · 0.85
database_identityFunction · 0.85
y_or_nFunction · 0.85
get_auth_headerFunction · 0.85
send_requestFunction · 0.85
print_database_tree_infoFunction · 0.85
get_host_urlMethod · 0.80
statusMethod · 0.80
OkFunction · 0.50
newFunction · 0.50
mapMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…