crossclip/
lib.rs

1//! Improved cross-platform clipboard library
2//!
3//! Fork of https://github.com/aweinstock314/rust-clipboard with better error handling
4
5#[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;