use couch_rs::types::find::FindQuery;
use serde_json::{Value, json};
use std::error::Error;
const TEST_DB: &str = "test_db";
fn test_docs(amount: i32) -> Vec<Value> {
let mut result: Vec<Value> = vec![];
for _i in 0..amount {
result.push(json!({"name": "Marcel"}));
}
result
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
println!("Connecting...");
let client = couch_rs::Client::new_local_test().unwrap();
let db = client.db(TEST_DB).await.unwrap();
let dbs = client.list_dbs().await?;
let mut db_initialized: bool = false;
println!("Existing databases:");
for db in dbs {
println!("Couch DB {db}");
if db == TEST_DB {
db_initialized = true;
}
}
if !db_initialized {
println!("{TEST_DB} not found");
return Ok(());
}
println!("--- Creating ---");
let mut test_docs = test_docs(100);
match db.bulk_docs(&mut test_docs).await {
Ok(resp) => {
println!("Bulk docs completed");
for r in resp {
match r {
Ok(details) => println!("Id: {}", details.id),
Err(err) => println!("Error: {err:?}"),
}
}
}
Err(err) => println!("Oops: unable to create documents {test_docs:?}: {err:?}"),
}
println!("--- Finding ---");
let find_all = FindQuery::find_all();
let docs = db.find::<Value>(&find_all).await?;
if let Some(row) = docs.rows.first() {
println!("First document: {row}");
}
println!("All operations are done");
Ok(())
}