1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
use abstractions::futures::future::Future; use abstractions::streams::stream::IntoFuture; use abstractions::poll::Poll; use abstractions::futures::chain::Chain; #[must_use = "futures do nothing unless polled"] pub struct Then<A, B, F> where A: Future, B: IntoFuture { state: Chain<A, B::Future, F>, } pub fn new<A, B, F>(future: A, f: F) -> Then<A, B, F> where A: Future, B: IntoFuture { Then { state: Chain::new(future, f) } } impl<A, B, F> Future for Then<A, B, F> where A: Future, B: IntoFuture, F: FnOnce(Result<A::Item, A::Error>) -> B { type Item = B::Item; type Error = B::Error; fn poll(&mut self) -> Poll<B::Item, B::Error> { self.state.poll(|a, f| Ok(Err(f(a).into_future()))) } }