use eloqstore::{EloqStore, Options, TableIdentifier};
use std::time::{SystemTime, UNIX_EPOCH};
fn timestamp_ms() -> u64 {
SystemTime::now()
.duration_since(UNIX_EPOCH)
.unwrap()
.as_millis() as u64
}
fn main() -> Result<(), eloqstore::KvError> {
println!("EloqStore Rust SDK - Basic Usage Example");
println!("==========================================\n");
println!("1. Configuring EloqStore...");
let mut opts = Options::new()?;
opts.set_num_threads(1)?;
opts.add_store_path("tmp/eloqstore_example")?;
println!(" ✓ Store path: tmp/eloqstore_example\n");
println!("2. Creating and starting the store...");
let mut store = EloqStore::new(&opts)?;
store.start()?;
println!(" ✓ Store started successfully\n");
println!("3. Creating a table...");
let table = TableIdentifier::new("users", 0)?;
let ts = timestamp_ms();
println!(" ✓ Table: users (partition 0)\n");
println!("4. Basic operations (put/get/delete):");
store.put(&table, b"user:1", b"Alice", ts)?;
println!(" ✓ put(\"user:1\", \"Alice\")");
if let Some(value) = store.get(&table, b"user:1")? {
println!(
" ✓ get(\"user:1\") -> {}",
String::from_utf8_lossy(&value)
);
}
store.put(&table, b"user:2", b"Bob", ts + 1)?;
store.put(&table, b"user:3", b"Charlie", ts + 2)?;
println!(" ✓ put(\"user:2\", \"Bob\")");
println!(" ✓ put(\"user:3\", \"Charlie\")\n");
println!("5. Batch operations:");
let keys: Vec<&[u8]> = vec![b"user:4", b"user:5", b"user:6"];
let values: Vec<&[u8]> = vec![b"David", b"Eve", b"Frank"];
store.put_batch(&table, &keys, &values, ts + 10)?;
println!(" ✓ put_batch(3 entries)");
for key in &keys {
if let Some(value) = store.get(&table, key)? {
println!(
" ✓ get({:?}) -> {}",
String::from_utf8_lossy(key),
String::from_utf8_lossy(&value)
);
}
}
println!();
println!("6. Scan operations (range query):");
let entries = store.scan(&table, b"user:1", b"user:5")?;
println!(
" ✓ scan(\"user:1\", \"user:5\") -> {} entries",
entries.len()
);
for entry in entries {
println!(
" - {}: {}",
String::from_utf8_lossy(&entry.key),
String::from_utf8_lossy(&entry.value)
);
}
println!();
println!("7. Floor operation:");
if let Some((key, value)) = store.floor(&table, b"user:3")? {
println!(
" ✓ floor(\"user:3\") -> {}: {}",
String::from_utf8_lossy(&key),
String::from_utf8_lossy(&value)
);
}
println!();
println!("8. Delete operations:");
store.delete(&table, b"user:1", ts + 100)?;
println!(" ✓ delete(\"user:1\")");
if store.get(&table, b"user:1")?.is_none() {
println!(" ✓ Verified: \"user:1\" no longer exists\n");
}
store.delete_batch(&table, &keys, ts + 101)?;
println!(" ✓ delete_batch(3 keys)\n");
println!("9. Stopping the store...");
store.stop();
println!(" ✓ Store stopped\n");
println!("Example completed successfully! 🎉");
Ok(())
}