summaryrefslogtreecommitdiffstats
path: root/native/src/command
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2021-09-01 19:21:49 +0700
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2021-09-02 13:29:34 +0700
commit76698ff2b5753e637b14533650c0d28e681be3c5 (patch)
tree6b3376df6ac84598b03f2885598b7908e993fe4a /native/src/command
parentb7b7741578257bbf6a8b873c360182e2c9b920ab (diff)
downloadiced-76698ff2b5753e637b14533650c0d28e681be3c5.tar.gz
iced-76698ff2b5753e637b14533650c0d28e681be3c5.tar.bz2
iced-76698ff2b5753e637b14533650c0d28e681be3c5.zip
Make `Command` implementations platform-specific
This allows us to introduce a platform-specific `Action` to both `iced_native` and `iced_web` and remove the `Clipboard` from `Application::update` to maintain purity. Additionally, this should let us implement further actions to let users query and modify the shell environment (e.g. window, clipboard, and more!)
Diffstat (limited to 'native/src/command')
-rw-r--r--native/src/command/action.rs24
1 files changed, 24 insertions, 0 deletions
diff --git a/native/src/command/action.rs b/native/src/command/action.rs
new file mode 100644
index 00000000..23d6e96e
--- /dev/null
+++ b/native/src/command/action.rs
@@ -0,0 +1,24 @@
+use crate::clipboard;
+use crate::window;
+
+pub enum Action<T> {
+ Future(iced_futures::BoxFuture<T>),
+ Clipboard(clipboard::Action<T>),
+ Window(window::Action),
+}
+
+impl<T> Action<T> {
+ /// Applies a transformation to the result of a [`Command`].
+ pub fn map<A>(self, f: impl Fn(T) -> A + 'static + Send + Sync) -> Action<A>
+ where
+ T: 'static,
+ {
+ use iced_futures::futures::FutureExt;
+
+ match self {
+ Self::Future(future) => Action::Future(Box::pin(future.map(f))),
+ Self::Clipboard(action) => Action::Clipboard(action.map(f)),
+ Self::Window(window) => Action::Window(window),
+ }
+ }
+}