openzeppelin_relayer/utils/
redis.rs

1use std::sync::Arc;
2use std::time::Duration;
3
4use color_eyre::Result;
5use redis::aio::ConnectionManager;
6use tokio::time::timeout;
7
8use crate::config::ServerConfig;
9
10/// Initializes a Redis connection manager.
11///
12/// # Arguments
13///
14/// * `config` - The server configuration.
15///
16/// # Returns
17///
18/// A connection manager for the Redis connection.
19pub async fn initialize_redis_connection(config: &ServerConfig) -> Result<Arc<ConnectionManager>> {
20    let redis_client = redis::Client::open(config.redis_url.as_str())?;
21    let connection_manager = timeout(
22        Duration::from_millis(config.redis_connection_timeout_ms),
23        redis::aio::ConnectionManager::new(redis_client),
24    )
25    .await
26    .map_err(|_| {
27        eyre::eyre!(
28            "Redis connection timeout after {}ms",
29            config.redis_connection_timeout_ms
30        )
31    })??;
32    let connection_manager = Arc::new(connection_manager);
33
34    Ok(connection_manager)
35}