use std::time::Duration; use anyhow::Context; use redis::Client as RedisClient; use sqlx::{postgres::PgPoolOptions, PgPool}; pub async fn connect_postgres(database_url: Option<&str>) -> anyhow::Result> { match database_url { Some(url) if !url.trim().is_empty() => { let pool = PgPoolOptions::new() .max_connections(5) .acquire_timeout(Duration::from_secs(5)) .connect(url) .await .with_context(|| format!("failed to connect to postgres at {url}"))?; Ok(Some(pool)) } _ => Ok(None), } } pub fn connect_redis(redis_url: Option<&str>) -> anyhow::Result> { match redis_url { Some(url) if !url.trim().is_empty() => { Ok(Some(RedisClient::open(url).context("failed to open redis client")?)) } _ => Ok(None), } }