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");
+}