use rustlite::Database;
use std::path::Path;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let db_path = "./demo_database";
println!("=== RustLite Persistent Database Demo ===\n");
if Path::new(db_path).exists() {
std::fs::remove_dir_all(db_path)?;
println!("๐งน Cleaned up previous demo data\n");
}
println!("๐ PART 1: Writing data to database...");
{
let db = Database::open(db_path)?;
db.put(b"user:1:name", b"Alice")?;
db.put(b"user:1:email", b"alice@example.com")?;
db.put(b"user:1:role", b"admin")?;
db.put(b"user:2:name", b"Bob")?;
db.put(b"user:2:email", b"bob@example.com")?;
db.put(b"user:2:role", b"user")?;
db.put(b"stats:total_users", b"2")?;
println!(" โ
Stored 2 users and 1 counter");
println!(" ๐ Data written to: {}", db_path);
}
println!(" ๐ Database closed\n");
println!("๐ PART 2: Reopening database and verifying data...");
{
let db = Database::open(db_path)?;
let name1 = db.get(b"user:1:name")?.unwrap();
let email1 = db.get(b"user:1:email")?.unwrap();
println!(
" User 1: {} <{}>",
String::from_utf8_lossy(&name1),
String::from_utf8_lossy(&email1)
);
let name2 = db.get(b"user:2:name")?.unwrap();
let email2 = db.get(b"user:2:email")?.unwrap();
println!(
" User 2: {} <{}>",
String::from_utf8_lossy(&name2),
String::from_utf8_lossy(&email2)
);
let count = db.get(b"stats:total_users")?.unwrap();
println!(" Total users: {}", String::from_utf8_lossy(&count));
println!(" โ
All data successfully retrieved!");
}
println!();
println!("๐ PART 3: Updating and deleting data...");
{
let db = Database::open(db_path)?;
db.put(b"user:1:role", b"superadmin")?;
println!(" ๐ Updated Alice's role to 'superadmin'");
db.delete(b"user:2:email")?;
println!(" ๐๏ธ Deleted Bob's email");
db.put(b"stats:total_users", b"2")?;
db.sync()?;
println!(" ๐พ Synced to disk");
}
println!();
println!("โ
PART 4: Final verification...");
{
let db = Database::open(db_path)?;
let role = db.get(b"user:1:role")?.unwrap();
println!(" Alice's role: {}", String::from_utf8_lossy(&role));
let bob_email = db.get(b"user:2:email")?;
println!(
" Bob's email: {:?}",
bob_email
.as_ref()
.map(|v| String::from_utf8_lossy(v).to_string())
);
assert_eq!(role, b"superadmin");
assert_eq!(bob_email, None);
println!(" โ
All assertions passed!");
}
std::fs::remove_dir_all(db_path)?;
println!("\n๐งน Cleaned up demo database");
println!("\n=== Demo Complete! ===");
Ok(())
}