1#[cfg(target_os = "windows")]
6extern crate clipboard_win;
7#[cfg(any(target_os = "linux", target_os = "openbsd"))]
8extern crate x11_clipboard;
9#[cfg(target_os = "macos")]
10#[macro_use]
11extern crate objc;
12#[cfg(target_os = "macos")]
13extern crate objc_foundation;
14#[cfg(target_os = "macos")]
15extern crate objc_id;
16
17pub mod clipboard_metadata;
18mod errors;
19
20pub use clipboard_metadata::ClipboardContentType;
21pub use errors::ClipboardError;
22
23pub trait Clipboard {
24 type Output;
25 fn new() -> Result<Self::Output, ClipboardError>;
26 fn get_contents(&self) -> Result<(Vec<u8>, ClipboardContentType), ClipboardError>;
27 fn get_string_contents(&self) -> Result<String, ClipboardError>;
28 fn set_contents(
29 &self,
30 contents: Vec<u8>,
31 format: ClipboardContentType,
32 ) -> Result<(), ClipboardError>;
33 fn set_string_contents(&self, contents: String) -> Result<(), ClipboardError>;
34}
35
36#[cfg(target_os = "windows")]
37pub mod win;
38#[cfg(target_os = "windows")]
39pub use win::WindowsClipboard as SystemClipboard;
40
41#[cfg(any(target_os = "linux", target_os = "openbsd"))]
42pub mod x11;
43#[cfg(any(target_os = "linux", target_os = "openbsd"))]
44pub use x11::X11Clipboard as SystemClipboard;
45
46#[cfg(target_os = "macos")]
47pub mod macos;
48#[cfg(target_os = "macos")]
49pub use macos::MacOsClipboard as SystemClipboard;