use sled::{IVec, Tree};
use crate::database::TransactionError;
pub type DbKey = [u8; 32];
pub(crate) fn sled_get_raw(tree: &Tree, key: &DbKey) -> sled::Result<Option<IVec>> {
tree.get(key)
}
pub(crate) fn sled_get_all_raw(tree: &Tree) -> sled::Result<Vec<IVec>> {
tree.iter().values().collect()
}
pub(crate) fn sled_get_all_keys_raw(tree: &Tree) -> sled::Result<Vec<DbKey>> {
tree.iter()
.keys()
.map(|ivec| {
let key: DbKey = (&*ivec?).try_into().expect("Expected 32 byte key");
Ok(key)
})
.collect::<Result<Vec<_>, _>>()
}
pub(crate) fn sled_get_batch_raw<I>(tree: &Tree, keys: I) -> Result<Vec<IVec>, TransactionError>
where
I: IntoIterator<Item = DbKey>,
{
keys.into_iter()
.map(|id| tree.get(id)?.ok_or(TransactionError::MissingEntry))
.collect::<Result<Vec<IVec>, TransactionError>>()
}