use ribbit_client::{Region, RibbitClient};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = RibbitClient::new(Region::US);
println!("Fetching WoW version information...\n");
let versions = client.get_product_versions("wow").await?;
if let Some(seqn) = versions.sequence_number {
println!("Sequence number: {seqn}\n");
}
println!("Version information by region:");
println!("{:-<60}", "");
for entry in &versions.entries {
println!(
"Region: {:6} | Build: {:6} | Version: {}",
entry.region, entry.build_id, entry.versions_name
);
}
println!("{:-<60}", "");
println!("\n📊 Additional Analysis:");
if let Some(us_version) = versions.get_region("us") {
println!("\nUS Version Details:");
println!(" Version: {}", us_version.versions_name);
println!(" Build ID: {}", us_version.build_id);
println!(
" Build Config: {}...{}",
&us_version.build_config[..8],
&us_version.build_config[us_version.build_config.len() - 8..]
);
println!(
" Product Config: {}...{}",
&us_version.product_config[..8],
&us_version.product_config[us_version.product_config.len() - 8..]
);
}
let builds = versions.build_ids();
println!("\nUnique build IDs: {builds:?}");
let all_same_build = versions
.entries
.iter()
.all(|e| e.build_id == versions.entries[0].build_id);
println!("\nAll regions on same build: {all_same_build}");
let version_name = &versions.entries[0].versions_name;
let regions_with_version = versions
.entries
.iter()
.filter(|e| &e.versions_name == version_name)
.count();
println!(
"Regions with version {}: {}/{}",
version_name,
regions_with_version,
versions.entries.len()
);
Ok(())
}