dioxus_std/clipboard/
use_clipboard.rs1use copypasta::{ClipboardContext, ClipboardProvider};
4use dioxus::prelude::*;
5
6#[derive(Debug, PartialEq, Clone)]
7pub enum ClipboardError {
8 FailedToRead,
9 FailedToSet,
10 NotAvailable,
11}
12
13#[derive(Clone, Copy, PartialEq)]
15pub struct UseClipboard {
16 clipboard: Signal<Option<ClipboardContext>>,
17}
18
19impl UseClipboard {
20 pub fn get(&mut self) -> Result<String, ClipboardError> {
22 self.clipboard
23 .write()
24 .as_mut()
25 .ok_or(ClipboardError::NotAvailable)?
26 .get_contents()
27 .map_err(|_| ClipboardError::FailedToRead)
28 }
29
30 pub fn set(&mut self, contents: String) -> Result<(), ClipboardError> {
32 self.clipboard
33 .write()
34 .as_mut()
35 .ok_or(ClipboardError::NotAvailable)?
36 .set_contents(contents)
37 .map_err(|_| ClipboardError::FailedToSet)
38 }
39}
40
41pub fn use_clipboard() -> UseClipboard {
61 let clipboard = match try_consume_context() {
62 Some(rt) => rt,
63 None => {
64 let clipboard = ClipboardContext::new().ok();
65 provide_root_context(Signal::new(clipboard))
66 }
67 };
68 UseClipboard { clipboard }
69}