use std::error::Error;
use std::time::Duration;
use common::*;
use x11_clipboard_crate::Clipboard;
pub struct X11ClipboardContext(Clipboard);
impl ClipboardProvider for X11ClipboardContext {
fn new() -> Result<X11ClipboardContext, Box<Error>> {
Clipboard::new()
.map(X11ClipboardContext)
.map_err(Into::into)
}
fn get_contents(&mut self) -> Result<String, Box<Error>> {
self.0.load(
self.0.getter.atoms.clipboard,
self.0.getter.atoms.utf8_string,
self.0.getter.atoms.property,
Duration::from_secs(3)
)
.map_err(Into::into)
.and_then(|vec| String::from_utf8(vec).map_err(Into::into))
}
fn set_contents(&mut self, data: String) -> Result<(), Box<Error>> {
self.0.store(
self.0.setter.atoms.clipboard,
self.0.setter.atoms.utf8_string,
data
)
.map_err(Into::into)
}
}