roadster/util/
redis.rs

1use async_trait::async_trait;
2use bb8::PooledConnection;
3use sidekiq::redis_rs::ToRedisArgs;
4use sidekiq::{RedisConnection, RedisConnectionManager, RedisError};
5
6/// Trait to help with mocking responses from Redis.
7#[cfg_attr(test, mockall::automock)]
8#[async_trait]
9pub(crate) trait RedisCommands {
10    async fn zrange(
11        &mut self,
12        key: String,
13        lower: isize,
14        upper: isize,
15    ) -> Result<Vec<String>, RedisError>;
16
17    async fn zrem<V>(&mut self, key: String, value: V) -> Result<usize, RedisError>
18    where
19        V: ToRedisArgs + Send + Sync + 'static;
20}
21
22#[async_trait]
23impl RedisCommands for PooledConnection<'_, RedisConnectionManager> {
24    async fn zrange(
25        &mut self,
26        key: String,
27        lower: isize,
28        upper: isize,
29    ) -> Result<Vec<String>, RedisError> {
30        RedisConnection::zrange(self, key, lower, upper).await
31    }
32
33    async fn zrem<V>(&mut self, key: String, value: V) -> Result<usize, RedisError>
34    where
35        V: ToRedisArgs + Send + Sync + 'static,
36    {
37        RedisConnection::zrem(self, key, value).await
38    }
39}