//! Access the clipboard. use crate::command::{self, Command}; use crate::futures::MaybeSend; use std::fmt; /// A clipboard action to be performed by some [`Command`]. /// /// [`Command`]: crate::Command pub enum Action { /// Read the clipboard and produce `T` with the result. Read(Box) -> T>), /// Write the given contents to the clipboard. Write(String), } impl Action { /// Maps the output of a clipboard [`Action`] using the provided closure. pub fn map( self, f: impl Fn(T) -> A + 'static + MaybeSend + Sync, ) -> Action where T: 'static, { match self { Self::Read(o) => Action::Read(Box::new(move |s| f(o(s)))), Self::Write(content) => Action::Write(content), } } } impl fmt::Debug for Action { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match self { Self::Read(_) => write!(f, "Action::Read"), Self::Write(_) => write!(f, "Action::Write"), } } } /// Read the current contents of the clipboard. pub fn read( f: impl Fn(Option) -> Message + 'static, ) -> Command { Command::single(command::Action::Clipboard(Action::Read(Box::new(f)))) } /// Write the given contents to the clipboard. pub fn write(contents: String) -> Command { Command::single(command::Action::Clipboard(Action::Write(contents))) }