use ourdb::{OurDB, OurDBConfig, OurDBSetArgs}; fn main() -> Result<(), ourdb::Error> { // Create a temporary directory for the database let db_path = std::env::temp_dir().join("ourdb_example"); std::fs::create_dir_all(&db_path)?; println!("Creating database at: {}", db_path.display()); // Create a new database with incremental mode enabled let config = OurDBConfig { path: db_path.clone(), incremental_mode: true, file_size: None, // Use default (500MB) keysize: None, // Use default (4 bytes) reset: None, // Don't reset existing database }; let mut db = OurDB::new(config)?; // Store some data with auto-generated IDs let data1 = b"First record"; let id1 = db.set(OurDBSetArgs { id: None, data: data1, })?; println!("Stored first record with ID: {}", id1); let data2 = b"Second record"; let id2 = db.set(OurDBSetArgs { id: None, data: data2, })?; println!("Stored second record with ID: {}", id2); // Retrieve and print the data let retrieved1 = db.get(id1)?; println!( "Retrieved ID {}: {}", id1, String::from_utf8_lossy(&retrieved1) ); let retrieved2 = db.get(id2)?; println!( "Retrieved ID {}: {}", id2, String::from_utf8_lossy(&retrieved2) ); // Update a record to demonstrate history tracking let updated_data = b"Updated first record"; db.set(OurDBSetArgs { id: Some(id1), data: updated_data, })?; println!("Updated record with ID: {}", id1); // Get history for the updated record let history = db.get_history(id1, 2)?; println!("History for ID {}:", id1); for (i, entry) in history.iter().enumerate() { println!(" Version {}: {}", i, String::from_utf8_lossy(entry)); } // Delete a record db.delete(id2)?; println!("Deleted record with ID: {}", id2); // Verify deletion match db.get(id2) { Ok(_) => println!("Record still exists (unexpected)"), Err(e) => println!("Verified deletion: {}", e), } // Close the database db.close()?; println!("Database closed successfully"); // Clean up (optional) if std::env::var("KEEP_DB").is_err() { std::fs::remove_dir_all(&db_path)?; println!("Cleaned up database directory"); } else { println!("Database kept at: {}", db_path.display()); } Ok(()) }