Expand description
Rotbl is a read-only on disk table of key-value.
use rotbl::v001::{Builder, Config, Rotbl, RotblMeta, SeqMarked};
#[tokio::main(flavor = "multi_thread")]
async fn main() {
use std::path::PathBuf;
use rotbl::storage::impls::fs::FsStorage;
let config = Config::default();
let r = {
let storage = FsStorage::new(PathBuf::from("./"));
let mut b = Builder::new(storage, config, "./foo").unwrap();
// keys must be sorted
b.append_kv("bar", SeqMarked::new_normal(1, b"bar".to_vec())).unwrap();
b.append_kv("foo", SeqMarked::new_normal(2, b"foo".to_vec())).unwrap();
Arc::new(b.commit(RotblMeta::new(1, "hello")).unwrap())
};
// Read the value back
let val = r.get("foo").await.unwrap();
assert_eq!(val, Some(SeqMarked::new_normal(2, b"foo".to_vec())));
// Scan the table
let kvs = r.range(..).try_collect::<Vec<_>>().await.unwrap();
assert_eq!(kvs, vec![
("bar".to_string(), SeqMarked::new_normal(1, b"bar".to_vec())),
("foo".to_string(), SeqMarked::new_normal(2, b"foo".to_vec())),
]);
}