cli_clipboard/
linux_clipboard.rs

1use 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}