1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
use futures::{IntoFuture, Future}; /// An action can be run multiple times and produces a future. pub trait Action { /// The future that this action produces. type Future: Future<Item=Self::Item, Error=Self::Error>; /// The item that the future may resolve with. type Item; /// The error that the future may resolve with. type Error; fn run(&mut self) -> Self::Future; } impl<T: IntoFuture, F: FnMut() -> T> Action for F { type Item = T::Item; type Error = T::Error; type Future = T::Future; fn run(&mut self) -> Self::Future { self().into_future() } }