use currency_converter::{ConversionRequest, CurrencyConverter, Result};
#[tokio::main]
async fn main() -> Result<()> {
println!("🚀 Currency Converter - Basic Usage Example");
println!("============================================");
if std::env::var("EXCHANGE_API_KEY").is_err() {
println!("❌ Please set EXCHANGE_API_KEY environment variable");
println!(" Get your free key at: https://exchangerate-api.com");
return Ok(());
}
let converter = CurrencyConverter::from_env()?;
println!("\n📊 Example 1: Basic Conversion");
println!("------------------------------");
let request = ConversionRequest::from_components(100.0, "USD", "EUR")?;
let result = converter.convert(request).await?;
println!("Conversion: {}", result.summary());
println!("Exchange rate: {:.6}", result.exchange_rate);
println!("Result amount: {}", result.result);
println!("Conversion type: {:?}", result.conversion_type);
println!("\n🔄 Example 2: Same Currency");
println!("---------------------------");
let same_request = ConversionRequest::from_components(50.0, "USD", "USD")?;
let same_result = converter.convert(same_request).await?;
println!("Same currency: {}", same_result.summary());
println!("\n🌍 Example 3: Cross Conversion");
println!("------------------------------");
let cross_request = ConversionRequest::from_components(100.0, "EUR", "GBP")?;
let cross_result = converter.convert(cross_request).await?;
println!("Cross conversion: {}", cross_result.summary());
println!("\n⚡ Example 4: Batch Conversions");
println!("------------------------------");
let batch_requests = vec![
ConversionRequest::from_components(100.0, "USD", "EUR")?,
ConversionRequest::from_components(100.0, "USD", "GBP")?,
ConversionRequest::from_components(100.0, "USD", "JPY")?,
ConversionRequest::from_components(100.0, "USD", "CAD")?,
];
let batch_results = converter.convert_batch(batch_requests).await;
for (i, result) in batch_results.iter().enumerate() {
match result {
Ok(conversion) => {
println!(" {}. {}", i + 1, conversion.summary());
}
Err(e) => {
println!(" {}. Error: {}", i + 1, e);
}
}
}
println!("\n🌏 Example 5: Available Currencies");
println!("----------------------------------");
let currencies = converter.get_available_currencies().await?;
println!("Total supported currencies: {}", currencies.len());
println!(
"Sample currencies: {:?}",
¤cies[..10.min(currencies.len())]
);
println!("\n📈 Example 6: Cache Performance");
println!("-------------------------------");
let stats = converter.exchange_service.get_cache_stats();
println!("Cache statistics:");
println!(" Total requests: {}", stats.total_requests);
println!(" Cache hits: {}", stats.hits);
println!(" Cache misses: {}", stats.misses);
println!(" Hit rate: {:.1}%", stats.hit_rate);
println!(" Cached entries: {}", stats.cached_entries);
println!("\n✅ Example completed successfully!");
Ok(())
}