use std::collections::HashMap;
use async_trait::async_trait;
use serde_json::Value as JsonValue;
use crate::error::CheckpointError;
pub type CacheNamespace = Vec<String>;
pub type FullKey = (CacheNamespace, String);
#[async_trait]
pub trait BaseCache: Send + Sync {
fn get(&self, keys: &[(CacheNamespace, String)]) -> Result<HashMap<FullKey, JsonValue>, CheckpointError>;
fn set(&self, pairs: &[(FullKey, JsonValue, Option<i64>)]) -> Result<(), CheckpointError>;
fn clear(&self, namespaces: Option<&[CacheNamespace]>) -> Result<(), CheckpointError>;
async fn aget(&self, keys: Vec<(CacheNamespace, String)>) -> Result<HashMap<FullKey, JsonValue>, CheckpointError> {
self.get(&keys)
}
async fn aset(&self, pairs: Vec<(FullKey, JsonValue, Option<i64>)>) -> Result<(), CheckpointError> {
self.set(&pairs)
}
async fn aclear(&self, namespaces: Option<Vec<CacheNamespace>>) -> Result<(), CheckpointError> {
let ns_ref = namespaces.as_deref();
self.clear(ns_ref)
}
}