use aok::Result;
use fred::{interfaces::HashesInterface, prelude::RedisClient};
use xbin::concat;
use crate::{Cache, Map, Vov};
#[derive(Clone)]
pub struct HsetCache {
pub hset: Box<[u8]>,
pub kv: RedisClient,
}
impl HsetCache {
pub fn new(kv: RedisClient, prefix: impl AsRef<[u8]>) -> Self {
Self {
hset: prefix.as_ref().into(),
kv,
}
}
}
impl Cache for HsetCache {
async fn _set(&self, suffix: &[u8], map: Map) -> Result<()> {
Ok(self.kv.hset(concat!(self.hset, suffix), map).await?)
}
async fn _get(&self, suffix: &[u8], keys: &[Box<[u8]>]) -> Result<Vov> {
Ok(
self
.kv
.hmget(concat!(self.hset, suffix), keys.to_vec())
.await?,
)
}
}