Skip to main content

platform_core/
redis.rs

1use crate::config::RedisConfig;
2use crate::error::{AppError, AppResult, ErrorCode};
3
4pub type RedisConnection = ::redis::aio::ConnectionManager;
5
6pub async fn connect_redis(config: &RedisConfig) -> AppResult<Option<RedisConnection>> {
7    let Some(url) = config.url.as_deref() else {
8        return Ok(None);
9    };
10
11    let client = ::redis::Client::open(url).map_err(map_redis_error)?;
12    let connection = ::redis::aio::ConnectionManager::new(client)
13        .await
14        .map_err(map_redis_error)?;
15    Ok(Some(connection))
16}
17
18fn map_redis_error(source: ::redis::RedisError) -> AppError {
19    AppError::new(ErrorCode::ExternalDependency, "Redis connection failed")
20        .with_source(source)
21        .retryable()
22}