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}