pub use redis;
mod single;
#[cfg(test)]
mod tests;
pub use single::CiseauxSingle;
pub use single::SingleInit;
use std::time::Duration;
const DEFAULT_CONNS_COUNT: ConnectionsCount = ConnectionsCount::Global(4);
const DEFAULT_RECONNECT_BEHAVIOR: ReconnectBehavior = ReconnectBehavior::InstantRetry;
const DEFAULT_WAIT_RETRY_DUR: Duration = Duration::from_secs(2);
#[derive(Clone, Copy, Debug, PartialEq)]
pub enum ConnectionsCount {
Global(usize),
PerThread(usize),
}
impl std::default::Default for ConnectionsCount {
fn default() -> Self {
DEFAULT_CONNS_COUNT
}
}
impl ConnectionsCount {
fn into_flat(self) -> usize {
match self {
ConnectionsCount::Global(c) => c,
ConnectionsCount::PerThread(c) => num_cpus::get() * c,
}
}
}
#[derive(Clone, Copy, Debug, PartialEq)]
pub enum ReconnectBehavior {
NoReconnect,
InstantRetry,
RetryWaitRetry(Option<Duration>),
}
impl std::default::Default for ReconnectBehavior {
fn default() -> Self {
DEFAULT_RECONNECT_BEHAVIOR
}
}
#[async_trait::async_trait]
pub trait QueryAble {
async fn query<T: redis::FromRedisValue>(
&self,
conn: &mut redis::aio::Connection,
) -> Result<T, redis::RedisError>;
}
#[async_trait::async_trait]
impl QueryAble for redis::Cmd {
async fn query<T: redis::FromRedisValue>(
&self,
conn: &mut redis::aio::Connection,
) -> Result<T, redis::RedisError> {
self.query_async::<redis::aio::Connection, T>(conn).await
}
}
#[async_trait::async_trait]
impl QueryAble for &redis::Cmd {
async fn query<T: redis::FromRedisValue>(
&self,
conn: &mut redis::aio::Connection,
) -> Result<T, redis::RedisError> {
self.query_async::<redis::aio::Connection, T>(conn).await
}
}
#[async_trait::async_trait]
impl QueryAble for &mut redis::Cmd {
async fn query<T: redis::FromRedisValue>(
&self,
conn: &mut redis::aio::Connection,
) -> Result<T, redis::RedisError> {
self.query_async::<redis::aio::Connection, T>(conn).await
}
}
#[async_trait::async_trait]
impl QueryAble for redis::Pipeline {
async fn query<T: redis::FromRedisValue>(
&self,
conn: &mut redis::aio::Connection,
) -> Result<T, redis::RedisError> {
self.query_async::<redis::aio::Connection, T>(conn).await
}
}
#[async_trait::async_trait]
impl QueryAble for &redis::Pipeline {
async fn query<T: redis::FromRedisValue>(
&self,
conn: &mut redis::aio::Connection,
) -> Result<T, redis::RedisError> {
self.query_async::<redis::aio::Connection, T>(conn).await
}
}
#[async_trait::async_trait]
impl QueryAble for &mut redis::Pipeline {
async fn query<T: redis::FromRedisValue>(
&self,
conn: &mut redis::aio::Connection,
) -> Result<T, redis::RedisError> {
self.query_async::<redis::aio::Connection, T>(conn).await
}
}