use reqwest::Client;
use serde_json::{json, Value};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("🦀 Testing Rust Zero Trust SDK...\n");
let client = Client::new();
let api_url = "http://localhost:3000";
let token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiI1ZTZhZjg0Mi1jMjNhLTRmOWYtYWM2Yy0yYzE5ODBiNDQ2ZmYiLCJlbWFpbCI6InRlc3RAZXhhbXBsZS5jb20iLCJyb2xlIjoiZGF0YWJhc2VfYWRtaW4iLCJleHAiOjE3NTg5ODU2NzcsImlhdCI6MTc1ODg5OTI3N30.5Tk2WnBKvWXB6Xih2cdfTAR5Rp3B9Pak6LYIXhj6HjE";
println!("📂 Getting databases...");
let databases_response = client
.get(&format!("{}/api/v1/databases", api_url))
.header("Authorization", format!("Bearer {}", token))
.header("Content-Type", "application/json")
.send()
.await?;
if databases_response.status().is_success() {
let databases: Vec<String> = databases_response.json().await?;
println!("✅ Databases: {:?} ...", &databases[..databases.len().min(5)]);
} else {
println!("❌ Failed to get databases: {}", databases_response.status());
return Ok(());
}
println!();
let test_db_name = format!("rust_test_{}", chrono::Utc::now().timestamp());
println!("🗄️ Creating database: {}", test_db_name);
let create_db_payload = json!({
"name": test_db_name
});
let create_response = client
.post(&format!("{}/api/v1/databases", api_url))
.header("Authorization", format!("Bearer {}", token))
.header("Content-Type", "application/json")
.json(&create_db_payload)
.send()
.await?;
if create_response.status().is_success() {
let result: Value = create_response.json().await?;
println!("✅ Database created: {}", result);
println!("🔐 Transaction: {}", result["transaction"].as_str().unwrap_or("N/A"));
println!("⛽ Gas used: {}", result["gas_used"].as_u64().unwrap_or(0));
} else {
let error_text = create_response.text().await?;
println!("❌ Failed to create database: {}", error_text);
return Ok(());
}
println!();
println!("📋 Creating table: products");
let columns = vec![
json!({"name": "id", "data_type": "INTEGER PRIMARY KEY"}),
json!({"name": "name", "data_type": "TEXT NOT NULL"}),
json!({"name": "price", "data_type": "DECIMAL(10,2)"}),
json!({"name": "category", "data_type": "TEXT"}),
];
let create_table_payload = json!({
"database": test_db_name,
"table_name": "products",
"columns": columns
});
let table_response = client
.post(&format!("{}/api/v1/databases/{}/tables", api_url, test_db_name))
.header("Authorization", format!("Bearer {}", token))
.header("Content-Type", "application/json")
.json(&create_table_payload)
.send()
.await?;
if table_response.status().is_success() {
let table_result: Value = table_response.json().await?;
println!("✅ Table created: {}", table_result["table"].as_str().unwrap_or("products"));
println!("🔐 Transaction: {}", table_result["transaction"].as_str().unwrap_or("N/A"));
} else {
let error_text = table_response.text().await?;
println!("❌ Failed to create table: {}", error_text);
return Ok(());
}
println!();
println!("📝 Inserting data...");
let insert_payload = json!({
"database": test_db_name,
"table": "products",
"data": {
"id": 1,
"name": "Rust Book",
"price": 49.99,
"category": "Programming"
}
});
let insert_response = client
.post(&format!("{}/api/v1/data", api_url))
.header("Authorization", format!("Bearer {}", token))
.header("Content-Type", "application/json")
.json(&insert_payload)
.send()
.await?;
if insert_response.status().is_success() {
let insert_result: Value = insert_response.json().await?;
println!("✅ Data inserted successfully");
if let Some(tx) = insert_result["transaction"].as_str() {
println!("🔐 Transaction: {}", tx);
}
} else {
let error_text = insert_response.text().await?;
println!("❌ Failed to insert data: {}", error_text);
}
println!();
println!("🎉 Rust SDK test completed successfully!");
Ok(())
}