84 lines
2.3 KiB
Rust
84 lines
2.3 KiB
Rust
use ourdb::{OurDB, OurDBConfig, OurDBSetArgs};
|
|
use std::env::temp_dir;
|
|
use std::time::{SystemTime, UNIX_EPOCH};
|
|
|
|
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|
println!("Standalone OurDB Example");
|
|
println!("=======================\n");
|
|
|
|
// Create a temporary directory for the database
|
|
let timestamp = SystemTime::now()
|
|
.duration_since(UNIX_EPOCH)
|
|
.unwrap()
|
|
.as_secs();
|
|
let db_path = temp_dir().join(format!("ourdb_example_{}", timestamp));
|
|
std::fs::create_dir_all(&db_path)?;
|
|
|
|
println!("Creating database at: {}", db_path.display());
|
|
|
|
// Create a new OurDB instance
|
|
let config = OurDBConfig {
|
|
path: db_path.clone(),
|
|
incremental_mode: true,
|
|
file_size: None,
|
|
keysize: None,
|
|
reset: Some(false),
|
|
};
|
|
|
|
let mut db = OurDB::new(config)?;
|
|
println!("Database created successfully");
|
|
|
|
// Store some data
|
|
let test_data = b"Hello, OurDB!";
|
|
let id = db.set(OurDBSetArgs {
|
|
id: None,
|
|
data: test_data,
|
|
})?;
|
|
println!("\nStored data with ID: {}", id);
|
|
|
|
// Retrieve the data
|
|
let retrieved = db.get(id)?;
|
|
println!("Retrieved data: {}", String::from_utf8_lossy(&retrieved));
|
|
|
|
// Update the data
|
|
let updated_data = b"Updated data in OurDB!";
|
|
db.set(OurDBSetArgs {
|
|
id: Some(id),
|
|
data: updated_data,
|
|
})?;
|
|
println!("\nUpdated data with ID: {}", id);
|
|
|
|
// Retrieve the updated data
|
|
let retrieved = db.get(id)?;
|
|
println!(
|
|
"Retrieved updated data: {}",
|
|
String::from_utf8_lossy(&retrieved)
|
|
);
|
|
|
|
// Get history
|
|
let history = db.get_history(id, 2)?;
|
|
println!("\nHistory for ID {}:", id);
|
|
for (i, data) in history.iter().enumerate() {
|
|
println!(" Version {}: {}", i + 1, String::from_utf8_lossy(data));
|
|
}
|
|
|
|
// Delete the data
|
|
db.delete(id)?;
|
|
println!("\nDeleted data with ID: {}", id);
|
|
|
|
// Try to retrieve the deleted data (should fail)
|
|
match db.get(id) {
|
|
Ok(_) => println!("Data still exists (unexpected)"),
|
|
Err(e) => println!("Verified deletion: {}", e),
|
|
}
|
|
|
|
println!("\nExample completed successfully!");
|
|
|
|
// Clean up
|
|
db.close()?;
|
|
std::fs::remove_dir_all(&db_path)?;
|
|
println!("Cleaned up database directory");
|
|
|
|
Ok(())
|
|
}
|