leveldb_minimal

Crates.ioleveldb_minimal
lib.rsleveldb_minimal
version0.1.0
sourcesrc
created_at2020-09-12 12:26:15.092761
updated_at2020-09-12 12:26:15.092761
descriptionAn minimal interface for leveldb
homepagehttps://github.com/librelois/leveldb
repositoryhttps://github.com/librelois/leveldb
max_upload_size
id287716
size54,916
Éloïs (librelois)

documentation

README

Rust leveldb bindings

Minimal bindings for leveldb for Rust.

This crate is a fork of leveldb that:

  • removes the typing of the key
  • removes iterators on keys or values only
  • resolves warning clippings

Goal

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.

Rust version policy

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.

Prerequisites

snappy and leveldb need to be installed. On Ubuntu, I recommend:

sudo apt-get install libleveldb-dev libsnappy-dev

Usage

If your project is using Cargo, drop the following lines in your Cargo.toml:

[dependencies]

leveldb-minimal = "0.1"

Development

Make sure you have all prerequisites installed. Run

$ cargo build

for building and

$ cargo test

to run the test suite.

Examples

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.create_if_missing = true;
  let mut database = match Database::open(path, options) {
      Ok(db) => { db },
      Err(e) => { panic!("failed to open database: {:?}", e) }
  };

  let write_opts = WriteOptions::new();
  match database.put(write_opts, &[1], &[1]) {
      Ok(_) => { () },
      Err(e) => { panic!("failed to write to database: {:?}", e) }
  };

  let read_opts = ReadOptions::new();
  let res = database.get(read_opts, &[1]);

  match res {
    Ok(data) => {
      assert!(data.is_some());
      assert_eq!(data, Some(vec![1]));
    }
    Err(e) => { panic!("failed reading data: {:?}", e) }
  }

  let read_opts = ReadOptions::new();
  let mut iter = database.iter(read_opts);
  let entry = iter.next();
  assert_eq!(
    entry,
    Some((vec![1], vec![1]))
  );
}

License

MIT, see LICENSE

Commit count: 228

cargo fmt