use crate::ClipboardProvider; use raw_window_handle::{HasRawDisplayHandle, RawDisplayHandle}; use std::error::Error; pub use clipboard_wayland as wayland; pub use clipboard_x11 as x11; pub fn connect( window: &W, ) -> Result, Box> { let clipboard = match window.raw_display_handle() { Ok(RawDisplayHandle::Wayland(handle)) => Box::new(unsafe { wayland::Clipboard::connect(handle.display.as_ptr()) }) as _, _ => Box::new(x11::Clipboard::connect()?) as _, }; Ok(clipboard) } impl ClipboardProvider for wayland::Clipboard { fn read(&self) -> Result> { self.read() } fn write(&mut self, contents: String) -> Result<(), Box> { self.write(contents) } } impl ClipboardProvider for x11::Clipboard { fn read(&self) -> Result> { self.read().map_err(Box::from) } fn write(&mut self, contents: String) -> Result<(), Box> { self.write(contents).map_err(Box::from) } }