use chalk_client::ChalkClient;
use chalk_client::offline::OfflineQueryParams;
use std::time::Duration;
#[tokio::main]
async fn main() -> chalk_client::error::Result<()> {
let client = ChalkClient::new().build().await?;
println!("Environment: {}", client.environment_id());
println!("\n=== Offline Query ===");
let params = OfflineQueryParams::new()
.with_input("user.id", vec![
serde_json::json!(1),
serde_json::json!(2),
serde_json::json!(3),
])
.with_output("user.id")
.with_output("user.name")
.with_output("user.age");
let response = client.offline_query(params).await?;
println!("Revisions: {}", response.revisions.len());
if let Some(rev) = response.revisions.last() {
println!(" revision_id: {:?}", rev.revision_id);
println!(" status: {:?}", rev.status);
}
if !response.errors.is_empty() {
eprintln!("Errors: {:?}", response.errors);
}
println!("\nWaiting for job to complete...");
client
.wait_for_offline_query(&response, Some(Duration::from_secs(300)))
.await?;
println!("Job completed!");
let urls = client
.get_offline_query_download_urls(&response, Some(Duration::from_secs(60)))
.await?;
println!("Download URLs ({}):", urls.len());
for (i, url) in urls.iter().enumerate() {
println!(" [{}] {}", i, url);
}
println!("\nOffline query example completed!");
Ok(())
}