aboutsummaryrefslogtreecommitdiff
path: root/copypasta/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'copypasta/src/lib.rs')
-rw-r--r--copypasta/src/lib.rs46
1 files changed, 46 insertions, 0 deletions
diff --git a/copypasta/src/lib.rs b/copypasta/src/lib.rs
new file mode 100644
index 00000000..722142aa
--- /dev/null
+++ b/copypasta/src/lib.rs
@@ -0,0 +1,46 @@
+//! A cross-platform clipboard library
+
+/// Types that can get the system clipboard contents
+pub trait Load : Sized {
+ /// Errors encountered when working with a clipboard. Each implementation is
+ /// allowed to define its own error type, but it must conform to std error.
+ type Err: ::std::error::Error + Send + Sync + 'static;
+
+ /// Create a clipboard
+ fn new() -> Result<Self, Self::Err>;
+
+ /// Get the primary clipboard contents.
+ fn load_primary(&self) -> Result<String, Self::Err>;
+
+ /// Get the clipboard selection contents.
+ ///
+ /// On most platforms, this doesn't mean anything. A default implementation
+ /// is provided which uses the primary clipboard.
+ #[inline]
+ fn load_selection(&self) -> Result<String, Self::Err> {
+ self.load_primary()
+ }
+}
+
+/// Types that can set the system clipboard contents
+///
+/// Note that some platforms require the clipboard context to stay active in
+/// order to load the contents from other applications.
+pub trait Store : Load {
+ /// Sets the primary clipboard contents
+ fn store_primary(&mut self, contents: String) -> Result<(), Self::Err>;
+
+ /// Sets the secondary clipboard contents
+ fn store_selection(&mut self, contents: String) -> Result<(), Self::Err>;
+}
+
+#[cfg(target_os = "linux")]
+mod x11;
+#[cfg(target_os = "linux")]
+pub use x11::{Clipboard, Error};
+
+#[cfg(target_os = "macos")]
+mod macos;
+#[cfg(target_os = "macos")]
+pub use macos::{Clipboard, Error};
+