use crate::{
Error, Result,
client::{Config, ExclusiveClient, IntoConfig},
commands::ConnectionCommands,
};
use bb8::ManageConnection;
pub struct PooledClientManager {
config: Config,
}
impl PooledClientManager {
pub fn new(config: impl IntoConfig) -> Result<Self> {
Ok(Self {
config: config.into_config()?,
})
}
}
impl ManageConnection for PooledClientManager {
type Connection = ExclusiveClient;
type Error = Error;
async fn connect(&self) -> Result<ExclusiveClient> {
let config = self.config.clone();
ExclusiveClient::connect(config).await
}
async fn is_valid(&self, client: &mut ExclusiveClient) -> Result<()> {
client.ping::<()>(()).await?;
Ok(())
}
fn has_broken(&self, client: &mut ExclusiveClient) -> bool {
client.inner().is_network_task_finished()
}
}