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
use {Future, Poll}; /// Combines two different futures yielding the same item and error /// types into a single type. pub enum Either<A, B> { /// First branch of the type A(A), /// Second branch of the type B(B), } impl<A, B> Future for Either<A, B> where A: Future, B: Future<Item = A::Item, Error = A::Error> { type Item = A::Item; type Error = A::Error; fn poll(&mut self) -> Poll<A::Item, A::Error> { match *self { Either::A(ref mut a) => a.poll(), Either::B(ref mut b) => b.poll(), } } }