Expand description
MHdb is a pure Rust embedded key-value store database, based on dbm.
§Simple use
use mhdb::{Db, prelude::*};
let mut db = Db::open("mydb")?;
let key = "Number".to_owned();
let val = 42i32;
db.store(key.clone(), val)?;
let num: Option<i32> = db.fetch(42u8)?;
assert_eq!(num, Some(val));
println!("{}", num.unwrap());Any type implementing Datum can be stored in the database.
§Datum
A datum represents a single item in the database. Types
used as keys and/or values must therefore implement the
Datum trait.
Datum is automatically implemented on any type implementing
the Serde traits Serialize and Deserialize.
§In-memory database
Any type which implements the Source trait can be used
as database sources. This trait is in turn automatically
implemented for any type which implements the Read,
Write, Seek, Sync, and Send
standard library traits.
A vector may therefore be used as an in-memory database.
use mhdb::{Db, prelude::*};
use std::io::Cursor;
let dirf = Cursor::new(Vec::<u8>::new());
let pagf = Cursor::new(Vec::<u8>::new());
let mut db: Db = Db::with_sources(Box::new(pagf), Box::new(dirf))?;
db.store(42u8, "Hello world".to_owned())?;
let txt: Option<String> = db.fetch(42u8)?;
assert!(txt.is_some());
println!("{}", txt.unwrap());§Limitations
- Key-value pairs can not be larger than 506B
Dbobjects are not thread safe
Modules§
- prelude
- The Db prelude.
Structs§
- Db
- The database object. All interraction with mhdb databases is done through this object.
Enums§
- Error
- Errors returned by database operations.