/// A buffer for short-term storage and transfer within and between /// applications. #[allow(missing_debug_implementations)] pub struct Clipboard { state: State, } enum State { Connected(window_clipboard::Clipboard), Unavailable, } impl Clipboard { /// Creates a new [`Clipboard`] for the given window. pub fn connect(window: &winit::window::Window) -> Clipboard { let state = window_clipboard::Clipboard::connect(window) .ok() .map(State::Connected) .unwrap_or(State::Unavailable); Clipboard { state } } /// Reads the current content of the [`Clipboard`] as text. pub fn read(&self) -> Option { match &self.state { State::Connected(clipboard) => clipboard.read().ok(), State::Unavailable => None, } } /// Writes the given text contents to the [`Clipboard`]. pub fn write(&mut self, contents: String) { match &mut self.state { State::Connected(clipboard) => match clipboard.write(contents) { Ok(()) => {} Err(error) => { log::warn!("error writing to clipboard: {}", error) } }, State::Unavailable => {} } } } impl iced_native::Clipboard for Clipboard { fn read(&self) -> Option { self.read() } fn write(&mut self, contents: String) { self.write(contents) } }