use ngdp_cache::cached_ribbit_client::CachedRibbitClient;
use ribbit_client::{Endpoint, Region};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
tracing_subscriber::fmt()
.with_max_level(tracing::Level::INFO)
.init();
println!("=== Drop-in Replacement Example ===\n");
let client = CachedRibbitClient::new(Region::US).await?;
println!("1. Using convenience methods (with automatic caching):\n");
let start = std::time::Instant::now();
let summary = client.get_summary().await?;
println!(" Summary fetched in {:?}", start.elapsed());
println!(" Found {} products", summary.products.len());
let start = std::time::Instant::now();
let _summary2 = client.get_summary().await?;
println!(" Second summary fetch in {:?} (cached!)", start.elapsed());
println!("\n2. Product versions:");
let versions = client.get_product_versions("wow").await?;
println!(" WoW has {} version entries", versions.entries.len());
if let Some(us_version) = versions.entries.iter().find(|e| e.region == "us") {
println!(
" US Build: {} ({})",
us_version.build_id, us_version.versions_name
);
}
println!("\n3. CDN configuration:");
let cdns = client.get_product_cdns("wow").await?;
if let Some(us_cdn) = cdns.entries.iter().find(|e| e.name == "us") {
println!(" US CDN hosts: {}", us_cdn.hosts.join(", "));
}
println!("\n4. Using request_typed (also cached):");
let bgdl = client
.request_typed::<ribbit_client::ProductBgdlResponse>(&Endpoint::ProductBgdl(
"wow".to_string(),
))
.await?;
println!(" Background download entries: {}", bgdl.entries.len());
println!("\n5. Raw requests (cached at byte level):");
let raw = client
.request_raw(&Endpoint::ProductVersions("d4".to_string()))
.await?;
println!(" D4 versions raw response: {} bytes", raw.len());
println!("\n6. Full Response objects (with caching):");
let response = client.request(&Endpoint::Summary).await?;
println!(" Response has {} bytes raw data", response.raw.len());
if let Some(data) = response.data {
println!(" Parsed data: {} characters", data.len());
}
println!("\n7. Configuration access:");
println!(" Current region: {:?}", client.inner().region());
println!(
" Protocol version: {:?}",
client.inner().protocol_version()
);
println!("\n8. Cache control:");
println!(" Clearing expired entries...");
client.clear_expired().await?;
println!(
"\n✓ CachedRibbitClient provides the complete RibbitClient API with transparent caching!"
);
Ok(())
}