Mercurial > lbo > hg > sstable
changeset 48:bbb2e76ee581
Implement a simple example binary.
author | Lewin Bormann <lbo@spheniscida.de> |
---|---|
date | Sun, 11 Mar 2018 16:58:51 +0100 |
parents | e2e8dbf80106 |
children | 8a287fd23f95 |
files | Cargo.toml examples/rw_sstable/Cargo.toml examples/rw_sstable/src/main.rs |
diffstat | 3 files changed, 64 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/Cargo.toml Sun Mar 11 16:58:32 2018 +0100 +++ b/Cargo.toml Sun Mar 11 16:58:51 2018 +0100 @@ -16,3 +16,6 @@ [dev-dependencies] time-test = "0.2" + +[workspace] +members = ["examples/rw_sstable"]
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/rw_sstable/Cargo.toml Sun Mar 11 16:58:51 2018 +0100 @@ -0,0 +1,7 @@ +[package] +name = "read_write_sstable" +version = "0.1.0" +authors = ["Lewin Bormann <lewin@lewin-bormann.info>"] + +[dependencies] +sstable = {path = "../../"}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/rw_sstable/src/main.rs Sun Mar 11 16:58:51 2018 +0100 @@ -0,0 +1,54 @@ +use std::fs; +use std::path::{Path, PathBuf}; + +extern crate sstable; +use sstable::Result; +use sstable::SSIterator; + +fn make_table() -> Vec<(Vec<u8>, Vec<u8>)> { + let data = &[ + ("abc", "111111"), + ("def", "11222"), + ("dfg", "0001"), + ("zzz", "123456"), + ]; + data.iter() + .map(|&(k, v)| (k.as_bytes().to_vec(), v.as_bytes().to_vec())) + .collect() +} + +fn write_table(p: &Path) -> Result<()> { + let dst = fs::OpenOptions::new() + .create(true) + .truncate(true) + .write(true) + .open(p)?; + let mut tb = sstable::TableBuilder::new(sstable::Options::default(), dst); + + for (ref k, ref v) in make_table() { + tb.add(k, v)?; + } + tb.finish()?; + Ok(()) +} + +fn read_table(p: &Path) -> Result<()> { + let tr = sstable::Table::new_from_file(sstable::Options::default(), p)?; + let mut iter = tr.iter(); + while iter.advance() { + let (k, v) = sstable::current_key_val(&iter).unwrap(); + println!( + "{} => {}", + String::from_utf8(k).unwrap(), + String::from_utf8(v).unwrap() + ); + } + Ok(()) +} + +fn main() { + let path = PathBuf::from("/tmp/some.random.sstable"); + // Read a couple key/value pairs to a table in /tmp and read them back. + write_table(&path).expect("writing the table failed"); + read_table(&path).expect("Reading the table failed"); +}