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

Function select_database

crates/cli/src/subcommands/dev.rs:1139–1238  ·  view source on GitHub ↗
(config: &Config, server: &str, token: &str)

Source from the content-addressed store, hash-verified

1137}
1138
1139async fn select_database(config: &Config, server: &str, token: &str) -> Result<String, anyhow::Error> {
1140 let identity = crate::util::decode_identity(&token.to_string())?;
1141
1142 let spinner = ProgressBar::new_spinner();
1143 spinner.set_style(
1144 ProgressStyle::default_spinner()
1145 .template("{spinner:.cyan} {msg}")
1146 .unwrap(),
1147 );
1148 spinner.set_message("Fetching database list...");
1149 spinner.enable_steady_tick(Duration::from_millis(100));
1150
1151 let client = reqwest::Client::new();
1152 let res = client
1153 .get(format!(
1154 "{}/v1/identity/{}/databases",
1155 config.get_host_url(Some(server))?,
1156 identity
1157 ))
1158 .bearer_auth(token)
1159 .send()
1160 .await?;
1161
1162 let result: DatabasesResult = res
1163 .json_or_error()
1164 .await
1165 .context("Unable to retrieve databases for identity")?;
1166
1167 if result.identities.is_empty() {
1168 spinner.finish_and_clear();
1169 println!("{}", "No existing databases found.".yellow());
1170 Ok(generate_database_name())
1171 } else {
1172 let total = result.identities.len();
1173 spinner.set_message(format!("Fetching names for {} databases...", total));
1174
1175 // Fetch database names with HTTP queries to /database/{identity}/names
1176 // It's parallelyzed in case a user has a lot of databases
1177 // TODO: we should introduce an endpoint that returns user's databases with names
1178 let databases: Vec<DatabaseRow> = stream::iter(result.identities.into_iter())
1179 .map(|identity_str| {
1180 let config = config.clone();
1181 async move {
1182 let names_response = spacetime_reverse_dns(&config, &identity_str, Some(server)).await?;
1183 let name = if names_response.names.is_empty() {
1184 identity_str.clone()
1185 } else {
1186 names_response.names[0].as_ref().to_string()
1187 };
1188 Ok::<DatabaseRow, anyhow::Error>(DatabaseRow {
1189 identity: identity_str,
1190 name,
1191 })
1192 }
1193 })
1194 .buffer_unordered(30)
1195 .collect::<Vec<_>>()
1196 .await

Callers 1

execFunction · 0.85

Calls 15

decode_identityFunction · 0.85
generate_database_nameFunction · 0.85
spacetime_reverse_dnsFunction · 0.85
firstFunction · 0.85
truncate_identityFunction · 0.85
json_or_errorMethod · 0.80
sendMethod · 0.65
iterMethod · 0.65
defaultMethod · 0.65
newFunction · 0.50
OkFunction · 0.50
iterFunction · 0.50

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…