use deadpool::managed::{Manager, Metrics, RecycleError, RecycleResult};
use super::AsyncDieselConnectionManager;
use crate::AsyncConnection;
pub type Pool<C> = deadpool::managed::Pool<AsyncDieselConnectionManager<C>>;
pub type PoolBuilder<C> = deadpool::managed::PoolBuilder<AsyncDieselConnectionManager<C>>;
pub type BuildError = deadpool::managed::BuildError;
pub type PoolError = deadpool::managed::PoolError<super::PoolError>;
pub type Object<C> = deadpool::managed::Object<AsyncDieselConnectionManager<C>>;
pub type Hook<C> = deadpool::managed::Hook<AsyncDieselConnectionManager<C>>;
pub type HookError = deadpool::managed::HookError<super::PoolError>;
impl<C> Manager for AsyncDieselConnectionManager<C>
where
C: AsyncConnection + 'static,
{
type Type = C;
type Error = super::PoolError;
async fn create(&self) -> Result<Self::Type, Self::Error> {
(self.manager_config.custom_setup)(&self.connection_url)
.await
.map_err(super::PoolError::ConnectionError)
}
async fn recycle(&self, obj: &mut Self::Type, _: &Metrics) -> RecycleResult<Self::Error> {
if obj.is_broken() {
return Err(RecycleError::Backend(super::PoolError::DisconnectionError));
}
Ok(())
}
}