diff options
Diffstat (limited to 'core')
-rw-r--r-- | core/src/command.rs | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/core/src/command.rs b/core/src/command.rs index e0e5ab5c..b4aa19cc 100644 --- a/core/src/command.rs +++ b/core/src/command.rs @@ -34,6 +34,31 @@ impl<T> Command<T> { } } + /// Applies a transformation to the result of a [`Command`]. + /// + /// [`Command`]: struct.Command.html + pub fn map<A>( + mut self, + f: impl Fn(T) -> A + 'static + Send + Sync, + ) -> Command<A> + where + T: 'static, + { + let f = std::sync::Arc::new(f); + + Command { + futures: self + .futures + .drain(..) + .map(|future| { + let f = f.clone(); + + future.map(move |result| f(result)).boxed() + }) + .collect(), + } + } + /// Creates a [`Command`] that performs the actions of all the given /// commands. /// |