//! HTTP client example for Memista\n//!\n//! This example demonstrates how to interact with a running Memista server\n//! using Rust's HTTP client. It shows how to:\n//! - Insert chunks via the HTTP API\n//! - Search for similar chunks\n//! - Drop databases\n\nuse reqwest;\nuse serde_json::{json, Value};\nuse std::error::Error;\n\n#[tokio::main]\nasync fn main() -> Result<(), Box<dyn Error>> {\n println!(\"Demonstrating HTTP client usage with Memista...\");\n \n // Create a reqwest client\n let client = reqwest::Client::new();\n \n // Memista server URL\n let base_url = \"http://127.0.0.1:8083\";\n \n // Database ID for our example\n let database_id = \"http_client_example_db\";\n \n // Check if the server is running\n println!(\"Checking if Memista server is running...\");\n let health_check = client.get(&format!(\"{}/openapi.json\", base_url)).send().await;\n \n match health_check {\n Ok(response) if response.status().is_success() => {\n println!(\"✓ Memista server is running\");\n }\n _ => {\n println!(\"✗ Memista server is not running at {}\", base_url);\n println!(\"Please start the server with: cargo run\");\n return Ok(());\n }\n }\n \n // Clean up any existing database\n println!(\"\\nCleaning up existing database...\");\n let drop_payload = json!({\n \"database_id\": database_id\n });\n \n let drop_response = client\n .delete(&format!(\"{}/v1/drop\", base_url))\n .header(\"Content-Type\", \"application/json\")\n .json(&drop_payload)\n .send()\n .await?;\n \n if drop_response.status().is_success() {\n println!(\"✓ Database cleanup completed\");\n } else {\n println!(\"⚠ Database cleanup failed (might not have existed): {}\", drop_response.status());\n }\n \n // Insert some chunks\n println!(\"\\nInserting chunks...\");\n let chunks = vec![\n json!({\n \"embedding\": [0.1, 0.2],\n \"text\": \"This is the first example chunk\",\n \"metadata\": \"{\\\"source\\\": \\\"http_example1\\\"}\"\n }),\n json!({\n \"embedding\": [0.3, 0.4],\n \"text\": \"This is the second example chunk\",\n \"metadata\": \"{\\\"source\\\": \\\"http_example2\\\"}\"\n }),\n json!({\n \"embedding\": [0.5, 0.6],\n \"text\": \"This is the third example chunk\",\n \"metadata\": \"{\\\"source\\\": \\\"http_example3\\\"}\"\n })\n ];\n \n let insert_payload = json!({\n \"database_id\": database_id,\n \"chunks\": chunks\n });\n \n let insert_response = client\n .post(&format!(\"{}/v1/insert\", base_url))\n .header(\"Content-Type\", \"application/json\")\n .json(&insert_payload)\n .send()\n .await?;\n \n match insert_response.status() {\n reqwest::StatusCode::OK => {\n let response_body: Value = insert_response.json().await?;\n println!(\"✓ Successfully inserted chunks: {:?}\", response_body);\n }\n status => {\n println!(\"✗ Failed to insert chunks: {}\", status);\n return Ok(());\n }\n }\n \n // Search for similar chunks\n println!(\"\\nSearching for similar chunks...\");\n let search_payload = json!({\n \"database_id\": database_id,\n \"embeddings\": [[0.1, 0.2]],\n \"num_results\": 5\n });\n \n let search_response = client\n .post(&format!(\"{}/v1/search\", base_url))\n .header(\"Content-Type\", \"application/json\")\n .json(&search_payload)\n .send()\n .await?;\n \n match search_response.status() {\n reqwest::StatusCode::OK => {\n let response_body: Value = search_response.json().await?;\n println!(\"✓ Search completed successfully\");\n println!(\"Results: {:#}\", response_body);\n }\n status => {\n println!(\"✗ Failed to search chunks: {}\", status);\n return Ok(());\n }\n }\n \n // Drop the database\n println!(\"\\nDropping database...\");\n let drop_payload = json!({\n \"database_id\": database_id\n });\n \n let drop_response = client\n .delete(&format!(\"{}/v1/drop\", base_url))\n .header(\"Content-Type\", \"application/json\")\n .json(&drop_payload)\n .send()\n .await?;\n \n match drop_response.status() {\n reqwest::StatusCode::OK => {\n let response_body: Value = drop_response.json().await?;\n println!(\"✓ Database dropped successfully: {:?}\", response_body);\n }\n status => {\n println!(\"✗ Failed to drop database: {}\", status);\n }\n }\n \n println!(\"\\nHTTP client example completed successfully!\");\n Ok(())\n}