use std::hash::Hash;
use crate::codec::Codec;
use crate::error::DbResult;
use crate::held_ops::HeldOps;
use crate::key::Key;
use crate::{TypedMapShard, TypedShard, TypedWriteHook};
impl<K, T, C, H> HeldOps for TypedShard<'_, K, T, C, H>
where
K: Key,
T: Send + Sync,
C: Codec<T>,
H: TypedWriteHook<K, T>,
{
type Key = K;
type Val = T;
fn try_contains(&mut self, key: &K) -> DbResult<bool> {
TypedShard::try_contains(self, key)
}
fn with_value<R>(&mut self, key: &K, f: impl FnOnce(&T) -> R) -> DbResult<Option<R>> {
Ok(TypedShard::try_get(self, key)?.map(f))
}
fn put(&mut self, key: &K, value: T) -> DbResult<()> {
TypedShard::put(self, key, value).map(drop)
}
fn delete(&mut self, key: &K) -> DbResult<()> {
TypedShard::delete(self, key).map(drop)
}
}
impl<K, T, C, H> HeldOps for TypedMapShard<'_, K, T, C, H>
where
K: Key + Hash + Eq,
T: Send + Sync,
C: Codec<T>,
H: TypedWriteHook<K, T>,
{
type Key = K;
type Val = T;
fn try_contains(&mut self, key: &K) -> DbResult<bool> {
TypedMapShard::try_contains(self, key)
}
fn with_value<R>(&mut self, key: &K, f: impl FnOnce(&T) -> R) -> DbResult<Option<R>> {
Ok(TypedMapShard::try_get(self, key)?.map(f))
}
fn put(&mut self, key: &K, value: T) -> DbResult<()> {
TypedMapShard::put(self, key, value).map(drop)
}
fn delete(&mut self, key: &K) -> DbResult<()> {
TypedMapShard::delete(self, key).map(drop)
}
}