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");
let client = Client::new(
"your-api-key-here",
"https://saas-core-production.up.railway.app",
);
println!("📋 Validating API key...\n");
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;
println!("👤 Account Information");
println!("────────────────────────────────────");
println!(" Tier: {}", key.tier);
println!("\n📊 Quota Management");
println!("────────────────────────────────────");
println!(" Limit: {:>15}", key.quota_limit);
println!(" Remaining: {:>15}", key.quota_remaining);
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);
println!("\n⚡ Rate Limiting");
println!("────────────────────────────────────");
println!(" Limit: {:>15}/sec", key.rate_limit);
println!(" Remaining: {:>15}", key.rate_limit_remaining);
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>)
}
}
}