use std::hash::Hash;
use bytesbuf::BytesView;
use bytesbuf::mem::GlobalPool;
use serde::Serialize;
use serde::de::DeserializeOwned;
use super::transform::TransformBuilder;
use crate::serialize::codec::{PostcardCodec, PostcardEncoder};
use crate::{CacheBuilder, CacheTier, CacheTierBuilder, FallbackBuilder};
impl<K, V, CT> CacheBuilder<K, V, CT>
where
K: Clone + Hash + Eq + Send + Sync + 'static,
V: Clone + Send + Sync + 'static,
CT: CacheTier<K, V> + Send + Sync + 'static,
{
#[must_use]
pub fn serialize(self) -> TransformBuilder<K, V, BytesView, BytesView, Self>
where
K: Serialize,
V: Serialize + DeserializeOwned,
{
let pool = GlobalPool::new();
self.transform(PostcardEncoder::new(pool.clone()), PostcardCodec::new(pool))
}
}
impl<K, V, PB, FB> FallbackBuilder<K, V, PB, FB>
where
K: Clone + Hash + Eq + Send + Sync + 'static,
V: Clone + Send + Sync + 'static,
PB: CacheTierBuilder<K, V>,
FB: CacheTierBuilder<K, V>,
{
#[must_use]
pub fn serialize(self) -> TransformBuilder<K, V, BytesView, BytesView, Self>
where
K: Serialize,
V: Serialize + DeserializeOwned,
{
let pool = GlobalPool::new();
self.transform(PostcardEncoder::new(pool.clone()), PostcardCodec::new(pool))
}
}