Documentation
use fred::{
  interfaces::HashesInterface,
  prelude::{Client, FredResult},
  types::{Map, MultipleKeys},
};

use crate::{Cache, Vov};

#[derive(Clone)]
pub struct HsetCache {
  pub hset: Box<[u8]>,
  pub kv: Client,
}

impl HsetCache {
  pub fn new(kv: Client, prefix: impl AsRef<[u8]>) -> Self {
    Self {
      hset: prefix.as_ref().into(),
      kv,
    }
  }
}

impl Cache for HsetCache {
  async fn _set_li(&self, map: Map) -> FredResult<()> {
    self.kv.hset(&self.hset[..], map).await
  }

  async fn _get_li(&self, keys: MultipleKeys) -> FredResult<Vov> {
    self.kv.hmget(&self.hset[..], keys).await
  }
}