use bb8::ManageConnection;
use super::{AsyncDieselConnectionManager, PoolError};
use crate::AsyncConnection;
pub type Pool<C> = bb8::Pool<AsyncDieselConnectionManager<C>>;
pub type PooledConnection<'a, C> = bb8::PooledConnection<'a, AsyncDieselConnectionManager<C>>;
pub type RunError = bb8::RunError<super::PoolError>;
impl<C> ManageConnection for AsyncDieselConnectionManager<C>
where
C: AsyncConnection + 'static,
{
type Connection = C;
type Error = PoolError;
async fn connect(&self) -> Result<Self::Connection, Self::Error> {
(self.manager_config.custom_setup)(&self.connection_url)
.await
.map_err(PoolError::ConnectionError)
}
async fn is_valid(&self, conn: &mut Self::Connection) -> Result<(), Self::Error> {
if conn.is_broken() {
return Err(super::PoolError::DisconnectionError);
}
Ok(())
}
fn has_broken(&self, conn: &mut Self::Connection) -> bool {
conn.is_broken()
}
}