use crate::error::Result;
pub struct SledBackend {
db: sled::Db,
tree: sled::Tree,
}
impl SledBackend {
pub fn open(path: &str) -> Result<Self> {
let db = sled::open(path)?;
let tree = db.open_tree("kv")?;
Ok(SledBackend { db, tree })
}
pub fn insert(&self, key: &str, value: &[u8]) -> Result<()> {
self.tree.insert(key.as_bytes(), value)?;
Ok(())
}
pub fn get(&self, key: &str) -> Result<Option<Vec<u8>>> {
let value = self.tree.get(key.as_bytes())?;
Ok(value.map(|v| v.to_vec()))
}
pub fn remove(&self, key: &str) -> Result<bool> {
let removed = self.tree.remove(key.as_bytes())?;
Ok(removed.is_some())
}
pub fn flush(&self) -> Result<()> {
self.db.flush()?;
Ok(())
}
}