use async_trait::async_trait;
use bb8::PooledConnection;
use sidekiq::redis_rs::ToRedisArgs;
use sidekiq::{RedisConnection, RedisConnectionManager, RedisError};
#[cfg_attr(test, mockall::automock)]
#[async_trait]
pub(crate) trait RedisCommands {
async fn zrange(
&mut self,
key: String,
lower: isize,
upper: isize,
) -> Result<Vec<String>, RedisError>;
async fn zrem<V>(&mut self, key: String, value: V) -> Result<usize, RedisError>
where
V: ToRedisArgs + Send + Sync + 'static;
}
#[async_trait]
impl RedisCommands for PooledConnection<'_, RedisConnectionManager> {
async fn zrange(
&mut self,
key: String,
lower: isize,
upper: isize,
) -> Result<Vec<String>, RedisError> {
RedisConnection::zrange(self, key, lower, upper).await
}
async fn zrem<V>(&mut self, key: String, value: V) -> Result<usize, RedisError>
where
V: ToRedisArgs + Send + Sync + 'static,
{
RedisConnection::zrem(self, key, value).await
}
}