use csfloat_rs::{Client, Result};
use csfloat_rs::models::WearCondition;
#[tokio::main]
async fn main() -> Result<()> {
dotenvy::dotenv().ok();
let api_key = std::env::var("CSFLOAT_API_KEY")
.expect("CSFLOAT_API_KEY environment variable not set");
let client = Client::new(api_key)?;
println!("=== CSFloat Schema Example ===");
println!("Testing the undocumented /schema endpoint...\n");
let schema = client.get_schema().await?;
println!("🎯 Schema loaded successfully!");
println!("📊 Total weapons: {}", schema.weapons.len());
println!("📦 Total collections: {}", schema.collections.len());
println!("\n=== Popular Weapons ===");
let popular_weapons = ["AK-47", "M4A4", "AWP", "Desert Eagle", "Glock-18"];
for weapon_name in &popular_weapons {
if let Some((id, weapon)) = schema.get_weapon_by_name(weapon_name) {
println!("🔫 {} (ID: {}) - {} paints available",
weapon.name, id, weapon.paints.len());
}
}
println!("\n=== AK-47 Redline Pricing ===");
if let Some((_, ak47)) = schema.get_weapon_by_name("AK-47") {
if let Some(redline) = ak47.get_paint_by_name("Redline") {
println!("🎨 Skin: {}", redline.name);
println!("💎 Rarity: {}", redline.rarity);
println!("🏭 Collection: {}", redline.collection.as_deref().unwrap_or("Unknown"));
println!("📈 Float range: {:.3} - {:.3}", redline.min, redline.max);
println!("⚡ Has StatTrak: {}", redline.has_stattrak());
println!("\n💰 Normal Prices:");
for wear in [WearCondition::FactoryNew, WearCondition::MinimalWear,
WearCondition::FieldTested, WearCondition::WellWorn,
WearCondition::BattleScarred] {
if let Some(price) = redline.price_for_wear(wear) {
if let Some(volume) = redline.volume_for_wear(wear) {
println!(" {} - ${:.2} (Volume: {})",
wear.as_str(), price as f64 / 100.0, volume);
}
}
}
if redline.has_stattrak() {
println!("\n⚡ StatTrak Prices:");
for wear in [WearCondition::FactoryNew, WearCondition::MinimalWear,
WearCondition::FieldTested, WearCondition::WellWorn,
WearCondition::BattleScarred] {
if let Some(price) = redline.stattrak_price_for_wear(wear) {
if let Some(volume) = redline.stattrak_volume_for_wear(wear) {
println!(" {} - ${:.2} (Volume: {})",
wear.as_str(), price as f64 / 100.0, volume);
}
}
}
}
}
}
println!("\n=== Most Expensive Skins ===");
let mut expensive_skins: Vec<(&str, &str, u64)> = Vec::new();
for (_, weapon) in &schema.weapons {
for paint in weapon.paints.values() {
if let Some(price) = paint.price_for_wear(WearCondition::FactoryNew) {
if price > 0 {
expensive_skins.push((&weapon.name, &paint.name, price));
}
}
}
}
expensive_skins.sort_by(|a, b| b.2.cmp(&a.2));
println!("🏆 Top 10 most expensive Factory New skins:");
for (i, (weapon, skin, price)) in expensive_skins.iter().take(10).enumerate() {
println!(" {}. {} | {} - ${:.2}",
i + 1, weapon, skin, *price as f64 / 100.0);
}
println!("\n=== Collections ===");
println!("📦 Available collections (first 10):");
for collection in schema.collections.iter().take(10) {
let souvenir = if collection.has_souvenir.unwrap_or(false) { " (Souvenir)" } else { "" };
let crate_info = if collection.has_crate.unwrap_or(false) { " (Crate)" } else { "" };
println!(" • {}{}{}", collection.name, souvenir, crate_info);
}
println!("\n✅ Schema example completed!");
Ok(())
}