From 76698ff2b5753e637b14533650c0d28e681be3c5 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Wed, 1 Sep 2021 19:21:49 +0700 Subject: 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!) --- native/src/command/action.rs | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 native/src/command/action.rs (limited to 'native/src/command') 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 { + Future(iced_futures::BoxFuture), + Clipboard(clipboard::Action), + Window(window::Action), +} + +impl Action { + /// Applies a transformation to the result of a [`Command`]. + pub fn map(self, f: impl Fn(T) -> A + 'static + Send + Sync) -> Action + 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), + } + } +} -- cgit From 2c630809d403f7fa87c3230be031299e5fb3af17 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Mon, 13 Sep 2021 11:20:54 +0700 Subject: Write missing docs and `Debug` implementations for `native` --- native/src/command/action.rs | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'native/src/command') diff --git a/native/src/command/action.rs b/native/src/command/action.rs index 23d6e96e..77be1b59 100644 --- a/native/src/command/action.rs +++ b/native/src/command/action.rs @@ -1,9 +1,19 @@ use crate::clipboard; use crate::window; +use std::fmt; + +/// An action that a [`Command`] can perform. +/// +/// [`Command`]: crate::Command pub enum Action { + /// Run a [`Future`] to completion. Future(iced_futures::BoxFuture), + + /// Run a clipboard action. Clipboard(clipboard::Action), + + /// Run a window action. Window(window::Action), } @@ -22,3 +32,15 @@ impl Action { } } } + +impl fmt::Debug for Action { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + Self::Future(_) => write!(f, "Action::Future"), + Self::Clipboard(action) => { + write!(f, "Action::Clipboard({:?})", action) + } + Self::Window(action) => write!(f, "Action::Window({:?})", action), + } + } +} -- cgit