use async_trait::async_trait;
use std::time::Duration;
use crate::error::FrameworkError;
#[async_trait]
pub trait CacheStore: Send + Sync {
async fn get_raw(&self, key: &str) -> Result<Option<String>, FrameworkError>;
async fn put_raw(
&self,
key: &str,
value: &str,
ttl: Option<Duration>,
) -> Result<(), FrameworkError>;
async fn has(&self, key: &str) -> Result<bool, FrameworkError>;
async fn forget(&self, key: &str) -> Result<bool, FrameworkError>;
async fn flush(&self) -> Result<(), FrameworkError>;
async fn increment(&self, key: &str, amount: i64) -> Result<i64, FrameworkError>;
async fn decrement(&self, key: &str, amount: i64) -> Result<i64, FrameworkError>;
async fn expire(&self, key: &str, ttl: Duration) -> Result<bool, FrameworkError>;
}