cli_clipboard/
linux_clipboard.rs1use crate::common::*;
2use crate::wayland_clipboard::WaylandClipboardContext;
3use crate::x11_clipboard::{Clipboard, X11ClipboardContext};
4use crate::Result;
5
6enum LinuxContext {
7 Wayland(WaylandClipboardContext),
8 X11(X11ClipboardContext),
9}
10
11pub struct LinuxClipboardContext {
12 context: LinuxContext,
13}
14
15impl ClipboardProvider for LinuxClipboardContext {
16 fn new() -> Result<LinuxClipboardContext> {
17 match WaylandClipboardContext::new() {
18 Ok(context) => Ok(LinuxClipboardContext {
19 context: LinuxContext::Wayland(context),
20 }),
21 Err(_) => match X11ClipboardContext::<Clipboard>::new() {
22 Ok(context) => Ok(LinuxClipboardContext {
23 context: LinuxContext::X11(context),
24 }),
25 Err(err) => Err(err),
26 },
27 }
28 }
29
30 fn get_contents(&mut self) -> Result<String> {
31 match &mut self.context {
32 LinuxContext::Wayland(context) => context.get_contents(),
33 LinuxContext::X11(context) => context.get_contents(),
34 }
35 }
36
37 fn set_contents(&mut self, content: String) -> Result<()> {
38 match &mut self.context {
39 LinuxContext::Wayland(context) => context.set_contents(content),
40 LinuxContext::X11(context) => context.set_contents(content),
41 }
42 }
43
44 fn clear(&mut self) -> Result<()> {
45 match &mut self.context {
46 LinuxContext::Wayland(context) => context.clear(),
47 LinuxContext::X11(context) => context.clear(),
48 }
49 }
50}