use aa_storage::Result;
use deadpool_redis::Pool;
use crate::config::RedisStorageConfig;
use crate::policy::RedisPolicyStore;
use crate::pool::build_pool;
use crate::rate_limit::RedisRateLimitCounter;
use crate::session::RedisSessionStore;
#[derive(Clone)]
pub struct RedisBackend {
pool: Pool,
}
impl RedisBackend {
pub fn connect(config: &RedisStorageConfig) -> Result<Self> {
Ok(Self {
pool: build_pool(config)?,
})
}
pub fn pool(&self) -> &Pool {
&self.pool
}
pub fn sessions(&self) -> RedisSessionStore {
RedisSessionStore::new(self.pool.clone())
}
pub fn rate_limiter(&self) -> RedisRateLimitCounter {
RedisRateLimitCounter::new(self.pool.clone())
}
pub fn policies(&self) -> RedisPolicyStore {
RedisPolicyStore::new(self.pool.clone())
}
}