Minimal bindings for leveldb for Rust.
This crate is a fork of leveldb that:
The goal of this fork is to be used as a backend of the kv_typed crate which already handles typing and iterators on keys or values only.
leveldb
is built and tested on stable releases of Rust. This are currently 1.46.0
. Nightlies
might not build at any point and failures are allowed.
snappy
and leveldb
need to be installed. On Ubuntu, I recommend:
sh
sudo apt-get install libleveldb-dev libsnappy-dev
If your project is using Cargo, drop the following lines in your Cargo.toml
:
```text [dependencies]
leveldb-minimal = "0.1" ```
Make sure you have all prerequisites installed. Run
sh
$ cargo build
for building and
sh
$ cargo test
to run the test suite.
```rust extern crate tempdir; extern crate leveldb;
use tempdir::TempDir; use leveldb::database::Database; use leveldb::iterator::Iterable; use leveldb::kv::KV; use leveldb::options::{Options,WriteOptions,ReadOptions};
fn main() { let tempdir = TempDir::new("demo").unwrap(); let path = tempdir.path();
let mut options = Options::new(); options.createifmissing = true; let mut database = match Database::open(path, options) { Ok(db) => { db }, Err(e) => { panic!("failed to open database: {:?}", e) } };
let writeopts = WriteOptions::new(); match database.put(writeopts, &[1], &[1]) { Ok(_) => { () }, Err(e) => { panic!("failed to write to database: {:?}", e) } };
let readopts = ReadOptions::new(); let res = database.get(readopts, &[1]);
match res { Ok(data) => { assert!(data.issome()); asserteq!(data, Some(vec![1])); } Err(e) => { panic!("failed reading data: {:?}", e) } }
let readopts = ReadOptions::new(); let mut iter = database.iter(readopts); let entry = iter.next(); assert_eq!( entry, Some((vec![1], vec![1])) ); } ```
MIT, see LICENSE