use redis_cloud::CloudClient;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let api_key = std::env::var("REDIS_CLOUD_API_KEY")?;
let api_secret = std::env::var("REDIS_CLOUD_API_SECRET")?;
let client = CloudClient::builder()
.api_key(api_key)
.api_secret(api_secret)
.build()?;
let subscription_id = std::env::args().nth(1).and_then(|s| s.parse::<i32>().ok());
let subscription_id = match subscription_id {
Some(id) => id,
None => {
let subs = client.subscriptions().get_all_subscriptions().await?;
subs.subscriptions
.and_then(|s| s.first().and_then(|sub| sub.id))
.expect("No subscriptions found. Pass subscription ID as argument.")
}
};
println!("Using subscription ID: {subscription_id}");
println!("\nFetching databases...");
let response = client
.databases()
.get_subscription_databases(subscription_id, None, None)
.await?;
for sub_info in &response.subscription {
let dbs = &sub_info.databases;
println!("Found {} databases:", dbs.len());
for db in dbs {
println!(
" - ID: {:?}, Name: {:?}, Status: {:?}",
db.database_id, db.name, db.status
);
if let Some(endpoint) = &db.public_endpoint {
println!(" Endpoint: {endpoint}");
}
if let Some(memory) = db.memory_limit_in_gb {
println!(" Memory: {memory} GB");
}
}
}
println!("\nFetching all databases (with pagination)...");
let all_dbs = client
.databases()
.get_all_databases(subscription_id)
.await?;
println!("Total databases: {}", all_dbs.len());
Ok(())
}