enigma-storage 0.0.1

Encrypted local storage for Enigma with mandatory at-rest encryption and cross-platform key vault providers.
Documentation
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(())
    }
}