use zeroentropy_community::Client;
use std::collections::HashMap;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
dotenv::dotenv().ok();
let client = Client::from_env()?;
println!("Creating collection...");
match client.collections().add("rust_example").await {
Ok(response) => println!("{}", response.message),
Err(zeroentropy_community::Error::Conflict(_)) => println!("Collection already exists"),
Err(e) => return Err(e.into()),
}
println!("\nAdding documents...");
client.documents().add_text(
"rust_example",
"doc1.txt",
"Rust is a systems programming language focused on safety and performance.",
None,
).await?;
client.documents().add_text(
"rust_example",
"doc2.txt",
"The Rust compiler prevents many common programming errors at compile time.",
None,
).await?;
let mut metadata = HashMap::new();
metadata.insert(
"category".to_string(),
zeroentropy_community::MetadataValue::String("tutorial".to_string()),
);
client.documents().add_text(
"rust_example",
"doc3.txt",
"Cargo is Rust's build system and package manager.",
Some(metadata),
).await?;
println!("Documents added successfully!");
println!("\nSearching for 'performance'...");
let results = client.queries().top_snippets(
"rust_example",
"performance",
5,
None,
Some(true), None,
None,
).await?;
println!("Found {} results:", results.results.len());
for (i, result) in results.results.iter().enumerate() {
println!("\n{}. {} (score: {:.4})", i + 1, result.path, result.score);
println!(" Content: {}", result.content);
if let Some(metadata) = &result.metadata {
println!(" Metadata: {:?}", metadata);
}
}
println!("\n\nListing all documents...");
let doc_list = client.documents().get_info_list("rust_example", Some(10), None).await?;
for doc in doc_list.documents {
println!("- {} (status: {:?})", doc.path, doc.index_status);
}
println!("\nCleaning up...");
client.collections().delete("rust_example").await?;
println!("Collection deleted!");
Ok(())
}