use copypasta::ClipboardProvider;
use freya_core::prelude::*;
#[derive(Debug, PartialEq, Clone)]
pub enum ClipboardError {
FailedToRead,
FailedToSet,
NotAvailable,
}
#[derive(Clone, Copy, PartialEq)]
pub struct Clipboard;
impl Clipboard {
pub(crate) fn create_or_create() -> State<Option<Box<dyn ClipboardProvider>>> {
consume_root_context()
}
pub fn get() -> Result<String, ClipboardError> {
Self::create_or_create()
.write()
.as_mut()
.ok_or(ClipboardError::NotAvailable)?
.get_contents()
.map_err(|_| ClipboardError::FailedToRead)
}
pub fn set(contents: String) -> Result<(), ClipboardError> {
Self::create_or_create()
.write()
.as_mut()
.ok_or(ClipboardError::NotAvailable)?
.set_contents(contents)
.map_err(|_| ClipboardError::FailedToSet)
}
}