use crate::types::{ShardOp, ShardStats, ShardUndo, StoreKey as Key, ValueBuf};
pub mod raw_table;
pub use raw_table::RawTableShard;
pub trait StateShard: Send + Sync {
fn apply(&self, ops: &[ShardOp]) -> ShardUndo;
fn revert(&self, undo: &ShardUndo);
fn get(&self, key: &Key) -> Option<ValueBuf>;
fn get_many(&self, keys: &[Key], out: &mut [Option<ValueBuf>]) {
debug_assert_eq!(
keys.len(),
out.len(),
"get_many requires matching keys/out lengths"
);
for (key, slot) in keys.iter().zip(out.iter_mut()) {
*slot = self.get(key);
}
}
fn stats(&self) -> ShardStats;
fn export_data(&self) -> Vec<(Key, ValueBuf)>;
fn visit_entries(&self, visitor: &mut dyn FnMut(Key, ValueBuf)) {
for (key, value) in self.export_data() {
visitor(key, value);
}
}
fn import_data(&self, data: Vec<(Key, ValueBuf)>);
}