use nebari::{
io::{fs::StdFile, memory::MemoryFile, ManagedFile},
tree::{ScanEvaluation, State, TreeFile, Unversioned, Versioned},
ArcBytes, Context, Error,
};
fn main() -> Result<(), Error> {
let mut unversioned_tree = TreeFile::<Unversioned, StdFile>::write(
"unversioned-tree.nebari",
State::default(),
&Context::default(),
None,
)?;
tree_basics(&mut unversioned_tree)?;
let mut unversioned_memory_tree = TreeFile::<Unversioned, MemoryFile>::write(
"unversioned-tree.nebari",
State::default(),
&Context::default(),
None,
)?;
tree_basics(&mut unversioned_memory_tree)?;
let mut versioned_tree = TreeFile::<Versioned, StdFile>::write(
"versioned-tree.nebari",
State::default(),
&Context::default(),
None,
)?;
tree_basics(&mut versioned_tree)?;
versioned_tree.scan_sequences(
..,
true,
false,
&mut |_key| ScanEvaluation::ReadData,
&mut |key, data| {
println!(
"Key {:?} contained {:?} at sequence {:?}. Previous sequence: {:?}",
key.key, data, key.sequence, key.last_sequence
);
Ok(())
},
)?;
Ok(())
}
fn tree_basics<Root: nebari::tree::Root, File: ManagedFile>(
tree: &mut TreeFile<Root, File>,
) -> Result<(), Error> {
tree.set(None, ArcBytes::from(b"a key"), ArcBytes::from(b"a value"))?;
tree.set(None, ArcBytes::from(b"b key"), ArcBytes::from(b"b value"))?;
let value = tree.get(b"a key", false)?.unwrap();
assert_eq!(value, b"a value");
tree.scan(
&(..),
true,
false,
&mut |_, _, _| ScanEvaluation::ReadData,
&mut |_key, _index| ScanEvaluation::ReadData,
&mut |key, _index, value| {
println!("Found key {:?} with value {:?}", key, value);
Ok(())
},
)?;
tree.set(
None,
ArcBytes::from(b"a key"),
ArcBytes::from(b"a new value"),
)?;
let updated_value = tree.get(b"a key", false)?.unwrap();
assert_eq!(updated_value, b"a new value");
Ok(())
}