use ngdp_client::fallback_client::FallbackClient;
use ribbit_client::{Endpoint, ProductVersionsResponse, Region};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
tracing_subscriber::fmt::init();
println!("Creating fallback client for US region...");
let client = FallbackClient::new(Region::US).await?;
let endpoint = Endpoint::ProductVersions("wow".to_string());
println!("\nRequesting WoW versions (will try Ribbit first, fall back to TACT if needed)...");
match client.request(&endpoint).await {
Ok(response) => {
if let Some(data) = &response.data {
println!("✓ Successfully retrieved data!");
println!(" Data length: {} bytes", data.len());
match client
.request_typed::<ProductVersionsResponse>(&endpoint)
.await
{
Ok(versions) => {
println!("✓ Parsed {} version entries", versions.entries.len());
for entry in versions.entries.iter().take(3) {
println!(
" - {}: {} (build {})",
entry.region, entry.versions_name, entry.build_id
);
}
}
Err(e) => eprintln!("Failed to parse versions: {e}"),
}
}
}
Err(e) => {
eprintln!("✗ Both Ribbit and TACT failed: {e}");
}
}
println!("\nDisabling caching...");
let mut client = client;
client.set_caching_enabled(false);
println!("Making another request (bypassing cache)...");
match client.request(&endpoint).await {
Ok(_) => println!("✓ Request succeeded without cache"),
Err(e) => eprintln!("✗ Request failed: {e}"),
}
println!("\nCleaning up expired cache entries...");
if let Err(e) = client.clear_expired().await {
eprintln!("Failed to clear expired entries: {e}");
} else {
println!("✓ Expired cache entries cleared");
}
Ok(())
}