tcvectordb 0.1.9

Rust SDK for Tencent Cloud VectorDB
Documentation
use tcvectordb::{enums::ReadConsistency, VectorDBClient};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    println!("🚀 VectorDB Rust SDK - Working Example");

    // 从环境变量读取配置
    let server_url = std::env::var("VECTORDB_URL").unwrap_or_else(|_| {
        println!("⚠️  VECTORDB_URL not set, using default: http://localhost:8100");
        "http://localhost:8100".to_string()
    });
    let username = std::env::var("VECTORDB_USERNAME").unwrap_or_else(|_| {
        println!("⚠️  VECTORDB_USERNAME not set, using default: root");
        "root".to_string()
    });
    let api_key = std::env::var("VECTORDB_API_KEY").unwrap_or_else(|_| {
        eprintln!("❌ Error: VECTORDB_API_KEY environment variable is required!");
        eprintln!("Please set it with: export VECTORDB_API_KEY=your-api-key");
        eprintln!("Or create a .env file based on .env.example");
        std::process::exit(1);
    });

    println!("🔧 Configuration:");
    println!("   Server: {}", server_url);
    println!("   Username: {}", username);
    println!(
        "   API Key: {}***",
        &api_key[..std::cmp::min(8, api_key.len())]
    );

    let client = VectorDBClient::new(
        &server_url,
        &username,
        &api_key,
        ReadConsistency::EventualConsistency,
        30,
    )?;

    println!("✅ Client created successfully");

    // 列出数据库
    println!("\n📊 Listing databases...");
    let databases = client.list_databases().await?;
    println!("Found {} database(s):", databases.len());
    for (i, db) in databases.iter().enumerate() {
        println!("   {}. {}", i + 1, db.name());
    }

    // 创建测试数据库
    println!("\n🔧 Creating test database...");
    let test_db_name = "rust_sdk_test";
    let db = client.create_database_if_not_exists(test_db_name).await?;
    println!("✅ Database '{}' created or exists", db.name());

    // 再次列出数据库以确认创建成功
    println!("\n📊 Updated database list:");
    let databases = client.list_databases().await?;
    for (i, db) in databases.iter().enumerate() {
        println!("   {}. {}", i + 1, db.name());
    }

    // 清理测试数据库
    println!("\n🧹 Cleaning up test database...");
    match client.drop_database(test_db_name).await {
        Ok(_) => println!("✅ Test database '{}' cleaned up", test_db_name),
        Err(e) => println!("⚠️  Warning: Could not clean up test database: {}", e),
    }

    println!("\n🎉 All operations completed successfully!");
    println!("Your VectorDB Rust SDK is working correctly!");

    Ok(())
}