//! Access the clipboard. use iced_futures::MaybeSend; use std::fmt; /// A buffer for short-term storage and transfer within and between /// applications. pub trait Clipboard { /// Reads the current content of the [`Clipboard`] as text. fn read(&self) -> Option; /// Writes the given text contents to the [`Clipboard`]. fn write(&mut self, contents: String); } /// A null implementation of the [`Clipboard`] trait. #[derive(Debug, Clone, Copy)] pub struct Null; impl Clipboard for Null { fn read(&self) -> Option { None } fn write(&mut self, _contents: String) {} } /// 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"), } } }