freya_clipboard/
clipboard.rs1use copypasta::ClipboardProvider;
4use freya_core::prelude::*;
5
6#[derive(Debug, PartialEq, Clone)]
7pub enum ClipboardError {
8 FailedToRead,
9 FailedToSet,
10 NotAvailable,
11}
12
13#[derive(Clone, Copy, PartialEq)]
29pub struct Clipboard;
30
31impl Clipboard {
32 pub(crate) fn create_or_create() -> State<Option<Box<dyn ClipboardProvider>>> {
33 consume_root_context()
34 }
35
36 pub fn get() -> Result<String, ClipboardError> {
38 Self::create_or_create()
39 .write()
40 .as_mut()
41 .ok_or(ClipboardError::NotAvailable)?
42 .get_contents()
43 .map_err(|_| ClipboardError::FailedToRead)
44 }
45
46 pub fn set(contents: String) -> Result<(), ClipboardError> {
48 Self::create_or_create()
49 .write()
50 .as_mut()
51 .ok_or(ClipboardError::NotAvailable)?
52 .set_contents(contents)
53 .map_err(|_| ClipboardError::FailedToSet)
54 }
55}