leveldb 0.8.6

An interface for leveldb
Documentation
use utils::{tmpdir};
use leveldb::database::{Database};
use leveldb::options::{Options,ReadOptions,WriteOptions};
use leveldb::database::kv::{KV};
use leveldb::database::batch::{Batch,Writebatch,WritebatchIterator};

#[test]
fn test_writebatch() {
    let mut opts = Options::new();
    opts.create_if_missing = true;
    let tmp = tmpdir("writebatch");
    let database = &mut Database::open(tmp.path(), opts).unwrap();
    let batch = &mut Writebatch::new();
    batch.put(1, &[1]);
    batch.put(2, &[2]);
    batch.delete(1);
    let wopts = WriteOptions::new();
    let ack = database.write(wopts, batch);
    assert!(ack.is_ok());

    let read_opts = ReadOptions::new();
    let res = database.get(read_opts, 2);

    match res {
        Ok(data) => {
            assert!(data.is_some());
            let data = data.unwrap();
            assert_eq!(data, vec!(2));
        },
        Err(_) => { panic!("failed reading data") }
    }

    let read_opts2 = ReadOptions::new();
    let res2 = database.get(read_opts2, 1);
    match res2 {
        Ok(data) => { assert!(data.is_none()) },
        Err(_) => { panic!("failed reading data") }
    }
}

struct Iter {
    put: i32,
    deleted: i32,
}

impl WritebatchIterator for Iter {
    type K = i32;

    fn put(&mut self,
           _key: i32,
           _value: &[u8]) {
        self.put = self.put + 1;
    }

    fn deleted(&mut self,
               _key: i32) {
        self.deleted = self.deleted + 1;
    }
}

#[test]
fn test_writebatchiter() {
    let mut opts = Options::new();
    opts.create_if_missing = true;
    let tmp = tmpdir("writebatch");
    let database = &mut Database::open(tmp.path(), opts).unwrap();
    let batch = &mut Writebatch::new();
    batch.put(1, &[1]);
    batch.put(2, &[2]);
    batch.delete(1);

    let wopts = WriteOptions::new();
    let ack = database.write(wopts, batch);
    assert!(ack.is_ok());

    let iter = Box::new(Iter { put: 0, deleted: 0 });
    let iter2 = batch.iterate(iter);
    assert_eq!(iter2.put, 2);
    assert_eq!(iter2.deleted, 1);
}