use std::future::Future;
use async_trait::async_trait;
use serde::de::DeserializeOwned;
use serde::Serialize;
use crate::caching::caching_strategy::{CachingDurationStrategy, CachingStrategy};
use crate::errors::NovaXError;
#[derive(Clone, Debug)]
pub struct CachingNone;
#[async_trait]
impl CachingStrategy for CachingNone {
async fn get_cache<T: Serialize + DeserializeOwned + Send>(&self, _key: u64) -> Result<Option<T>, NovaXError> {
Ok(None)
}
async fn set_cache<T: Serialize + DeserializeOwned + Send>(&self, _key: u64, _value: &T) -> Result<(), NovaXError> {
Ok(())
}
async fn clear(&self) -> Result<(), NovaXError> {
Ok(())
}
async fn get_or_set_cache<T, FutureGetter, Error>(&self, _key: u64, value_fn: FutureGetter) -> Result<T, Error>
where
T: Serialize + DeserializeOwned + Send,
FutureGetter: Future<Output=Result<T, Error>> + Send,
Error: From<NovaXError>
{
value_fn.await
}
fn with_duration_strategy(&self, _strategy: CachingDurationStrategy) -> Self {
CachingNone
}
}