use redis::{AsyncCommands, FromRedisValue, ToRedisArgs, ToSingleRedisArg}; use crate::error::{CacheError, CacheResult}; use crate::kv::Cache; impl Cache { pub async fn lpush( &self, key: &str, value: V, ) -> CacheResult { let mut conn = self.conn().clone(); conn.lpush(key, value).await.map_err(CacheError::from) } pub async fn rpush( &self, key: &str, value: V, ) -> CacheResult { let mut conn = self.conn().clone(); conn.rpush(key, value).await.map_err(CacheError::from) } pub async fn lpop(&self, key: &str) -> CacheResult> { let mut conn = self.conn().clone(); conn.lpop(key, None).await.map_err(CacheError::from) } pub async fn rpop(&self, key: &str) -> CacheResult> { let mut conn = self.conn().clone(); conn.rpop(key, None).await.map_err(CacheError::from) } pub async fn llen(&self, key: &str) -> CacheResult { let mut conn = self.conn().clone(); conn.llen(key).await.map_err(CacheError::from) } pub async fn lrange( &self, key: &str, start: isize, stop: isize, ) -> CacheResult> { let mut conn = self.conn().clone(); conn.lrange(key, start, stop) .await .map_err(CacheError::from) } pub async fn ltrim(&self, key: &str, start: isize, stop: isize) -> CacheResult<()> { let mut conn = self.conn().clone(); conn.ltrim(key, start, stop).await.map_err(CacheError::from) } pub async fn lindex( &self, key: &str, index: isize, ) -> CacheResult> { let mut conn = self.conn().clone(); conn.lindex(key, index).await.map_err(CacheError::from) } pub async fn lset( &self, key: &str, index: isize, value: V, ) -> CacheResult<()> { let mut conn = self.conn().clone(); conn.lset(key, index, value).await.map_err(CacheError::from) } pub async fn lrem( &self, key: &str, count: isize, value: V, ) -> CacheResult { let mut conn = self.conn().clone(); conn.lrem(key, count, value).await.map_err(CacheError::from) } }