leveldb-orm
An ORM wrapper for Rust levedb KV APIs. Use bincode to encoder / decoder key and object.
Rust version policy
Base on rust [leveldb]:
leveldb is built and tested on stable releases of Rust. This are currently 1.31.0 and 1.43.1. Nightlies
might not build at any point and failures are allowed. There are no known issues with nightlies, though.
Prerequisites
snappy and leveldb need to be installed. On Ubuntu, I recommend:
sudo apt-get install libleveldb-dev libsnappy-dev
Usage
The struct should impl Serialize and Deserialize, so we need serde
Derive by macros
[dependencies]
leveldb = "0.8"
leveldb-orm = { version = "0.1", features = ["macros"]}
serde = { version = "1.0", features = ["derive"] }
Then, on your main.rs:
Example
use leveldb::database::Database;
use leveldb::options::Options;
use leveldb_orm::{KVOrm, KeyOrm, LevelDBOrm};
use serde::{Deserialize, Serialize};
#[derive(LevelDBOrm, Serialize, Deserialize)]
#[level_db_key(executable, args)]
pub struct Command {
pub executable: u8,
pub args: Vec<String>,
pub current_dir: Option<String>,
}
fn main() {
let cmd = Command {
executable: 1,
args: vec!["arg1".into(), "arg2".into(), "arg3".into()],
current_dir: Some("\\dir".into()),
};
let mut options = Options::new();
options.create_if_missing = true;
let database = Database::open(std::path::Path::new("./mypath"), options).unwrap();
cmd.put(&database).unwrap();
let key = Command::encode_key((&cmd.executable, &cmd.args)).unwrap();
Command::get(&database, &key).unwrap();
Command::delete(&database, false, &key).unwrap();
}
Without macros feature
Only have to impl KeyOrm trait manually.