zero-trust-sdk 0.1.0

Rust SDK for Zero Trust Blockchain Database - Secure, programmable access to zero-trust data storage
Documentation
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";

    // Test 1: Get databases
    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!();

    // Test 2: Create database
    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!();

    // Test 3: Create table
    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!();

    // Test 4: Insert data
    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(())
}