diff options
author | 2021-09-01 19:21:49 +0700 | |
---|---|---|
committer | 2021-09-02 13:29:34 +0700 | |
commit | 76698ff2b5753e637b14533650c0d28e681be3c5 (patch) | |
tree | 6b3376df6ac84598b03f2885598b7908e993fe4a /native/src/clipboard.rs | |
parent | b7b7741578257bbf6a8b873c360182e2c9b920ab (diff) | |
download | iced-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/clipboard.rs')
-rw-r--r-- | native/src/clipboard.rs | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/native/src/clipboard.rs b/native/src/clipboard.rs index 081b4004..62dfc130 100644 --- a/native/src/clipboard.rs +++ b/native/src/clipboard.rs @@ -21,3 +21,20 @@ impl Clipboard for Null { fn write(&mut self, _contents: String) {} } + +pub enum Action<T> { + Read(Box<dyn Fn(Option<String>) -> T>), + Write(Box<dyn Fn(String) -> T>), +} + +impl<T> Action<T> { + pub fn map<A>(self, f: impl Fn(T) -> A + 'static + Send + Sync) -> Action<A> + where + T: 'static, + { + match self { + Self::Read(o) => Action::Read(Box::new(move |s| f(o(s)))), + Self::Write(o) => Action::Write(Box::new(move |s| f(o(s)))), + } + } +} |