use futures::{task, Async, Future, Poll};
use crate::{
conn::pool::{Inner, Pool},
error::Error,
};
use std::sync::{atomic, Arc};
pub struct DisconnectPool {
pool_inner: Arc<Inner>,
}
pub fn new(pool: Pool) -> DisconnectPool {
DisconnectPool {
pool_inner: pool.inner,
}
}
impl Future for DisconnectPool {
type Item = ();
type Error = Error;
fn poll(&mut self) -> Poll<Self::Item, Self::Error> {
self.pool_inner.wake.push(task::current());
if self.pool_inner.closed.load(atomic::Ordering::Acquire) {
Ok(Async::Ready(()))
} else {
Ok(Async::NotReady)
}
}
}