use async_trait::async_trait;
use std::borrow::Cow;
use crate::{CacheCapacity, Result};
use super::CacheKey;
#[async_trait]
pub trait CacheStrategy {
type CacheEntry;
async fn setup(&mut self) -> Result<()> {
Ok(())
}
async fn put<'a, K, V>(&mut self, key: &K, value: V) -> Result<Self::CacheEntry>
where
K: CacheKey + Sync + Send,
V: Into<Cow<'a, [u8]>> + Send;
async fn get<'a>(&self, entry: &'a Self::CacheEntry) -> Result<Cow<'a, [u8]>>;
async fn take(&mut self, entry: Self::CacheEntry) -> Result<Vec<u8>>;
async fn delete(&mut self, entry: Self::CacheEntry) -> Result<()>;
fn get_cache_capacity(&self) -> Option<CacheCapacity>;
}