Mercurial > lbo > hg > leveldb-rs
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(); +}