use std::sync::Arc;
use crate::cache::DEKCacheTrait;
use crate::error::cache::CacheError;
pub struct CustomCache {
get_fn: Arc<dyn (Fn(&String) -> Option<Vec<u8>>) + Send + Sync>,
set_fn: Arc<dyn (Fn(String, Vec<u8>) -> Result<Vec<u8>, CacheError>) + Send + Sync>,
}
impl CustomCache {
pub fn new<G, S>(get_fn: G, set_fn: S) -> Self
where
G: Fn(&String) -> Option<Vec<u8>> + Send + Sync + 'static,
S: Fn(String, Vec<u8>) -> Result<Vec<u8>, CacheError> + Send + Sync + 'static
{
CustomCache {
get_fn: Arc::new(get_fn),
set_fn: Arc::new(set_fn),
}
}
}
impl DEKCacheTrait for CustomCache {
type Identifier = String;
fn get(&self, k: &String) -> Option<Vec<u8>> {
(self.get_fn)(k)
}
fn set(&self, k: String, v: Vec<u8>) -> Result<Vec<u8>, CacheError> {
(self.set_fn)(k, v)
}
}