clipboard_master/
lib.rs

1//! Clipboard master
2//!
3//! Provides simple way to track updates of clipboard.
4//!
5//! ## Example:
6//!
7//! ```rust
8//! extern crate clipboard_master;
9//!
10//! use clipboard_master::{Master, ClipboardHandler, CallbackResult};
11//!
12//! use std::io;
13//!
14//! struct Handler;
15//!
16//! impl ClipboardHandler for Handler {
17//!     fn on_clipboard_change(&mut self) -> CallbackResult {
18//!         println!("Clipboard change happened!");
19//!         CallbackResult::Next
20//!     }
21//!
22//!     fn on_clipboard_error(&mut self, error: io::Error) -> CallbackResult {
23//!         eprintln!("Error: {}", error);
24//!         CallbackResult::Next
25//!     }
26//! }
27//!
28//! fn main() {
29//!     let mut master = Master::new(Handler).expect("create new monitor");
30//!
31//!     let shutdown = master.shutdown_channel();
32//!     std::thread::spawn(move || {
33//!         std::thread::sleep(core::time::Duration::from_secs(1));
34//!         println!("I did some work so time to finish...");
35//!         shutdown.signal();
36//!     });
37//!     //Working until shutdown
38//!     master.run().expect("Success");
39//! }
40//! ```
41
42#![cfg_attr(feature = "cargo-clippy", allow(clippy::style))]
43#![cfg_attr(rustfmt, rustfmt_skip)]
44
45use std::io;
46
47mod master;
48pub use master::{Master, Shutdown};
49
50///Describes Clipboard handler
51pub trait ClipboardHandler {
52    ///Callback to call on clipboard change.
53    fn on_clipboard_change(&mut self) -> CallbackResult;
54    ///Callback to call on when error happens in master.
55    fn on_clipboard_error(&mut self, error: io::Error) -> CallbackResult {
56        CallbackResult::StopWithError(error)
57    }
58
59    #[inline(always)]
60    ///Returns sleep interval for polling implementations (e.g. Mac).
61    ///
62    ///Default value is 500ms
63    fn sleep_interval(&self) -> core::time::Duration {
64        core::time::Duration::from_millis(500)
65    }
66}
67
68///Possible return values of callback.
69pub enum CallbackResult {
70    ///Wait for next clipboard change.
71    Next,
72    ///Stop handling messages.
73    Stop,
74    ///Special variant to propagate IO Error from callback.
75    StopWithError(io::Error)
76}
77
78impl Shutdown {
79    ///Signals shutdown
80    pub fn signal(self) {
81        drop(self);
82    }
83}