//! Access the clipboard. /// 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) {} } pub enum Action { Read(Box) -> T>), Write(Box T>), } impl Action { pub fn map(self, f: impl Fn(T) -> A + 'static + Send + Sync) -> Action 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)))), } } }