use {Future, Poll, Async}; /// Do something with the item of a future, passing it on. /// /// This is created by the `Future::inspect` method. #[derive(Debug)] #[must_use = "futures do nothing unless polled"] pub struct Inspect where A: Future { future: A, f: Option, } pub fn new(future: A, f: F) -> Inspect where A: Future, F: FnOnce(&A::Item), { Inspect { future: future, f: Some(f), } } impl Future for Inspect where A: Future, F: FnOnce(&A::Item), { type Item = A::Item; type Error = A::Error; fn poll(&mut self) -> Poll { match self.future.poll() { Ok(Async::NotReady) => Ok(Async::NotReady), Ok(Async::Ready(e)) => { (self.f.take().expect("cannot poll Inspect twice"))(&e); Ok(Async::Ready(e)) }, Err(e) => Err(e), } } }