leveldb-rs-binding 0.8.7

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

#[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);
}