mudra-cli 0.1.0

A robust, high-performance currency converter with caching and CLI interface
Documentation
//! Basic usage example for the currency converter library

use currency_converter::{ConversionRequest, CurrencyConverter, Result};

#[tokio::main]
async fn main() -> Result<()> {
    println!("🚀 Currency Converter - Basic Usage Example");
    println!("============================================");

    // Check for API key
    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(());
    }

    // Create converter from environment
    let converter = CurrencyConverter::from_env()?;

    // Example 1: Basic conversion
    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);

    // Example 2: Same currency conversion
    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());

    // Example 3: Cross conversion
    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());

    // Example 4: Batch conversions
    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);
            }
        }
    }

    // Example 5: Available currencies
    println!("\n🌏 Example 5: Available Currencies");
    println!("----------------------------------");

    let currencies = converter.get_available_currencies().await?;
    println!("Total supported currencies: {}", currencies.len());
    println!(
        "Sample currencies: {:?}",
        &currencies[..10.min(currencies.len())]
    );

    // Example 6: Cache statistics
    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(())
}