sdaas-rs 0.1.0

Official Rust SDK for SDaaS — Semantic Delta as a Service
Documentation
//! API key validation example
//!
//! Demonstrates API key validation and quota monitoring.
//!
//! Run with: `cargo run --example validation`

use sdaas_rs::Client;

fn main() {
    let rt = tokio::runtime::Runtime::new().unwrap();
    rt.block_on(main_async()).unwrap();
}

async fn main_async() -> Result<(), Box<dyn std::error::Error>> {
    println!("🔐 SDaaS Rust SDK - API Key Validation Example\n");

    // Initialize client with your API key
    let client = Client::new(
        "your-api-key-here",
        "https://saas-core-production.up.railway.app",
    );

    println!("📋 Validating API key...\n");

    // Validate API key and fetch account details
    match client.validate_key().await {
        Ok(response) => {
            if !response.valid {
                eprintln!("❌ API key is not valid!");
                return Ok(());
            }

            println!("✅ API key is valid!\n");

            let key = &response.key;

            // Display account tier
            println!("👤 Account Information");
            println!("────────────────────────────────────");
            println!("   Tier: {}", key.tier);

            // Display quota information
            println!("\n📊 Quota Management");
            println!("────────────────────────────────────");
            println!("   Limit:     {:>15}", key.quota_limit);
            println!("   Remaining: {:>15}", key.quota_remaining);

            // Calculate usage percentage
            let usage = key.quota_limit - key.quota_remaining;
            let usage_percent = if key.quota_limit > 0 {
                (usage as f64 / key.quota_limit as f64) * 100.0
            } else {
                0.0
            };

            println!("   Usage:     {:>14.1}%", usage_percent);

            // Display rate limiting
            println!("\n⚡ Rate Limiting");
            println!("────────────────────────────────────");
            println!("   Limit:     {:>15}/sec", key.rate_limit);
            println!("   Remaining: {:>15}", key.rate_limit_remaining);

            // Warnings
            println!("\n⚠️  Status Indicators");
            println!("────────────────────────────────────");

            let quota_threshold = key.quota_limit / 10;
            if key.quota_remaining < quota_threshold {
                println!(
                    "   ⚠️  Quota is running low! ({:.1}% remaining)",
                    (key.quota_remaining as f64 / key.quota_limit as f64) * 100.0
                );
            } else {
                println!("   ✅ Quota status: OK");
            }

            if key.rate_limit_remaining < (key.rate_limit / 10) {
                println!("   ⚠️  Rate limit nearly exhausted!");
            } else {
                println!("   ✅ Rate limit status: OK");
            }

            println!("\n📈 Summary");
            println!("────────────────────────────────────");
            println!(
                "   Plan: {} ({})",
                key.tier,
                if key.quota_limit > 1_000_000 {
                    "⭐ Premium"
                } else {
                    "💼 Standard"
                }
            );
            println!("   Ready for operations: ✅");
            Ok(())
        }
        Err(e) => {
            eprintln!("❌ Validation failed: {}", e);
            Err(Box::new(e) as Box<dyn std::error::Error>)
        }
    }
}