use crate::traits::valid_key::ValidKey;
use std::borrow::Cow;
pub trait Record<ChunkKey, ItemKey>
where
ChunkKey: ToOwned + ?Sized,
ChunkKey::Owned: Clone,
ItemKey: ToOwned + ?Sized,
ItemKey::Owned: Clone,
{
fn chunk_key(&self) -> Cow<ChunkKey>;
fn item_key(&self) -> Cow<ItemKey>;
}
impl<ChunkKey, ItemKey, R> Record<ChunkKey, ItemKey> for &R
where
ChunkKey: ValidKey,
ItemKey: ValidKey,
R: Record<ChunkKey, ItemKey>,
{
fn chunk_key(&self) -> Cow<ChunkKey> {
(*self).chunk_key()
}
fn item_key(&self) -> Cow<ItemKey> {
(*self).item_key()
}
}
impl<ItemKey, R> Record<(), ItemKey> for (ItemKey, R)
where
ItemKey: ValidKey,
{
fn chunk_key(&self) -> Cow<()> {
Cow::Owned(())
}
fn item_key(&self) -> Cow<ItemKey> {
Cow::Borrowed(&self.0)
}
}
impl<ChunkKey, ItemKey, R> Record<ChunkKey, ItemKey> for (ChunkKey, ItemKey, R)
where
ChunkKey: ValidKey,
ItemKey: ValidKey,
{
fn chunk_key(&self) -> Cow<ChunkKey> {
Cow::Borrowed(&self.0)
}
fn item_key(&self) -> Cow<ItemKey> {
Cow::Borrowed(&self.1)
}
}