changeset 372:0c2ec9035654

Add two example executables.
author Lewin Bormann <lbo@spheniscida.de>
date Sun, 08 Oct 2017 13:54:01 +0200
parents f8b1e35370a7
children 24a2501732de
files Cargo.toml examples/leveldb-tool/Cargo.toml examples/leveldb-tool/src/main.rs examples/write-a-lot/Cargo.toml examples/write-a-lot/src/main.rs
diffstat 5 files changed, 104 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/Cargo.toml	Sun Oct 08 13:53:33 2017 +0200
+++ b/Cargo.toml	Sun Oct 08 13:54:01 2017 +0200
@@ -12,3 +12,6 @@
 
 [dev-dependencies]
 time-test = "0.2"
+
+[workspace]
+members = ["examples/write-a-lot", "examples/leveldb-tool"]
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/leveldb-tool/Cargo.toml	Sun Oct 08 13:54:01 2017 +0200
@@ -0,0 +1,7 @@
+[package]
+name = "leveldb-tool"
+version = "0.1.0"
+authors = ["Lewin Bormann <lewin@lewin-bormann.info>"]
+
+[dependencies]
+leveldb_rs = { path = "../../" }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/leveldb-tool/src/main.rs	Sun Oct 08 13:54:01 2017 +0200
@@ -0,0 +1,47 @@
+extern crate leveldb_rs;
+
+use leveldb_rs::{DB, Options};
+
+use std::env::args;
+use std::iter::FromIterator;
+
+fn get(db: &mut DB, k: &str) {
+    match db.get(k.as_bytes()) {
+        Some(v) => println!("{} => {}", k, String::from_utf8(v).unwrap()),
+        None => println!("{} => <not found>", k),
+    }
+}
+
+fn put(db: &mut DB, k: &str, v: &str) {
+    db.put(k.as_bytes(), v.as_bytes()).unwrap();
+    db.flush().unwrap();
+}
+
+fn delete(db: &mut DB, k: &str) {
+    db.delete(k.as_bytes()).unwrap();
+    db.flush().unwrap();
+}
+
+fn main() {
+    let args = Vec::from_iter(args());
+
+    if args.len() < 3 {
+        panic!("Usage: {} [get|put|delete] key [val]", args[0]);
+    }
+
+    let mut opt = Options::default();
+    opt.reuse_logs = true;
+    let mut db = DB::open("tooldb", opt).unwrap();
+
+    match args[1].as_str() {
+        "get" => get(&mut db, &args[2]),
+        "put" => {
+            if args.len() < 4 {
+                panic!("Usage: {} put key val", args[0]);
+            }
+            put(&mut db, &args[2], &args[3]);
+        }
+        "delete" => delete(&mut db, &args[2]),
+        _ => unimplemented!(),
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/write-a-lot/Cargo.toml	Sun Oct 08 13:54:01 2017 +0200
@@ -0,0 +1,8 @@
+[package]
+name = "write-a-lot"
+version = "0.1.0"
+authors = ["Lewin Bormann <lewin@lewin-bormann.info>"]
+
+[dependencies]
+leveldb_rs = { path = "../../" }
+rand = "0.3"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/write-a-lot/src/main.rs	Sun Oct 08 13:54:01 2017 +0200
@@ -0,0 +1,39 @@
+extern crate leveldb_rs;
+extern crate rand;
+
+use leveldb_rs::DB;
+use leveldb_rs::Options;
+use rand::Rng;
+use rand::AsciiGenerator;
+
+use std::error::Error;
+use std::iter::FromIterator;
+
+const KEY_LEN: usize = 16;
+const VAL_LEN: usize = 48;
+
+fn gen_string(len: usize) -> String {
+    let mut rng = rand::thread_rng();
+    let mut rand = rng.gen_ascii_chars();
+
+    String::from_iter(rand.take(len))
+}
+
+fn fill_db(db: &mut DB, entries: usize) -> Result<(), Box<Error>> {
+    for i in 0..entries {
+        let (k, v) = (gen_string(KEY_LEN), gen_string(VAL_LEN));
+        db.put(k.as_bytes(), v.as_bytes())?;
+
+        if i % 100 == 0 {
+            db.flush()?;
+        }
+    }
+    Ok(())
+}
+
+fn main() {
+    let opt = Options::default();
+    let mut db = DB::open("test1", opt).unwrap();
+
+    fill_db(&mut db, 4096).unwrap();
+}