blocking_future 0.1.0

A simple wrapper to make using tokio_threadpool::blocking easier
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
pub struct BlockingFuture<F: FnOnce() -> T, T> {
    f: Option<F>,
}

impl<F: FnOnce() -> T, T> BlockingFuture<F, T> {
    pub fn new(f: F) -> Self {
        Self { f: Some(f) }
    }
}

impl<F: FnOnce() -> T, T> futures::Future for BlockingFuture<F, T> {
    type Item = T;
    type Error = tokio_threadpool::BlockingError;
    fn poll(&mut self) -> futures::Poll<Self::Item, Self::Error> {
        tokio_threadpool::blocking(|| self.f.take().expect("closure already used")())
    }
}