Mercurial > lbo > hg > sstable
view examples/rw_sstable/src/main.rs @ 111:fc26b746ea54 v0.9.0
Release v0.9.0
author | Lewin Bormann <lbo@spheniscida.de> |
---|---|
date | Tue, 16 Nov 2021 08:41:00 +0100 |
parents | 8ff0ebc7f63e |
children |
line wrap: on
line source
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<sstable::Table> { 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(tr) } fn lookup(t: &sstable::Table, key: &str) -> Result<Option<String>> { Ok(t.get(key.as_bytes())? .map(|v| unsafe { String::from_utf8_unchecked(v) })) } 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"); let tr = read_table(&path).expect("Reading the table failed"); println!("=== lookups ==="); println!("{} => {:?}", "000", lookup(&tr, "000").unwrap()); println!("{} => {:?}", "def", lookup(&tr, "def").unwrap()); println!("{} => {:?}", "zzy", lookup(&tr, "zzy").unwrap()); println!("{} => {:?}", "zzz", lookup(&tr, "zzz").unwrap()); }