1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
use async_trait::async_trait;
use ldap3::{drive, exop::WhoAmI, Ldap, LdapConnAsync, LdapError as Error};

pub type Pool = deadpool::managed::Pool<Ldap, Error>;
pub struct Manager(pub &'static str);

#[async_trait]
impl deadpool::managed::Manager<Ldap, Error> for Manager {
    async fn create(&self) -> Result<Ldap, Error> {
        let (conn, ldap) = LdapConnAsync::new(self.0).await?;
        drive!(conn);
        Ok(ldap)
    }
    async fn recycle(&self, conn: &mut Ldap) -> deadpool::managed::RecycleResult<Error> {
        conn.extended(WhoAmI).await?;
        Ok(())
    }
}