use wf_market::{Client, OrderType};
#[tokio::main]
async fn main() -> wf_market::Result<()> {
let client = Client::builder().build()?;
println!("=== Fetching all items ===");
let items = client.fetch_items().await?;
println!("Found {} tradeable items\n", items.len());
let nikana = items.iter().find(|i| i.slug == "nikana_prime_set");
if let Some(item) = nikana {
println!("=== Item: {} ===", item.slug);
if let Some(en) = item.i18n.get("en") {
println!("English name: {}", en.name);
}
println!();
println!("=== Orders for {} ===", item.slug);
let orders = client.get_orders(&item.slug).await?;
println!("Total orders: {}", orders.len());
let sell_orders: Vec<_> = orders
.iter()
.filter(|o| o.order.order_type == OrderType::Sell)
.take(5)
.collect();
println!("\nTop 5 sell orders:");
for order in sell_orders {
println!(
" {} - {}p x{} ({})",
order.user.ingame_name,
order.order.platinum,
order.order.quantity,
order.user.status
);
}
println!("\n=== Top Orders (Statistics) ===");
let top = client.get_top_orders(&item.slug, None).await?;
println!("Lowest sell: {:?}p", top.sell.first().map(|o| o.platinum));
println!("Highest buy: {:?}p", top.buy.first().map(|o| o.platinum));
}
println!("\n=== Using Cache ===");
let mut cache = wf_market::ApiCache::new();
let start = std::time::Instant::now();
let _items = client.get_items(Some(&mut cache)).await?;
println!("First fetch: {:?}", start.elapsed());
let start = std::time::Instant::now();
let _items = client.get_items(Some(&mut cache)).await?;
println!("Cached fetch: {:?}", start.elapsed());
println!("\nDone!");
Ok(())
}