use force::auth::ClientCredentials;
use force::client::ForceClientBuilder;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let auth = ClientCredentials::new_my_domain(
std::env::var("SF_CLIENT_ID").unwrap_or_else(|_| "client-id".to_string()),
std::env::var("SF_CLIENT_SECRET").unwrap_or_else(|_| "client-secret".to_string()),
std::env::var("SF_MY_DOMAIN_URL")
.unwrap_or_else(|_| "https://your-org.my.salesforce.com".to_string()),
);
let client = ForceClientBuilder::new().authenticate(auth).build().await?;
let soql = "SELECT Id FROM Account WHERE Name LIKE 'A%'";
println!("Analyzing query: {soql}");
let explanation = client.rest().explain(soql).await?;
for plan in explanation.plans {
println!(
"Plan: {}, Cost: {}",
plan.leading_operation_type, plan.relative_cost
);
println!(" Cardinality: {}", plan.cardinality);
println!(" SObject Type: {}", plan.sobject_type);
if !plan.notes.is_empty() {
println!(" Notes:");
for note in plan.notes {
println!(" - {}", note.description);
}
}
}
Ok(())
}