blob: 79cc22dd48530f92ee473e9b1868e76382519f6c [file] [log] [blame]
use std::io;
use crate::{ConnectionLike, RedisError};
macro_rules! impl_manage_connection {
($client:ty, $connection:ty) => {
impl r2d2::ManageConnection for $client {
type Connection = $connection;
type Error = RedisError;
fn connect(&self) -> Result<Self::Connection, Self::Error> {
self.get_connection()
}
fn is_valid(&self, conn: &mut Self::Connection) -> Result<(), Self::Error> {
if conn.check_connection() {
Ok(())
} else {
Err(RedisError::from(io::Error::from(io::ErrorKind::BrokenPipe)))
}
}
fn has_broken(&self, conn: &mut Self::Connection) -> bool {
!conn.is_open()
}
}
};
}
impl_manage_connection!(crate::Client, crate::Connection);
#[cfg(feature = "cluster")]
impl_manage_connection!(
crate::cluster::ClusterClient,
crate::cluster::ClusterConnection
);