use std::rc::Rc;
use super::osc52::write_osc52;
use super::service::{ClipboardConfig, ClipboardService};
#[derive(Clone)]
pub struct ClipboardHandle {
service: Rc<ClipboardService>,
config: ClipboardConfig,
}
impl ClipboardHandle {
pub(crate) fn new(service: Rc<ClipboardService>, config: ClipboardConfig) -> Self {
Self { service, config }
}
pub fn copy(&self, text: &str) -> Result<(), super::error::ClipboardError> {
self.service.write_clipboard_text(text)?;
if self.config.enable_osc52 {
write_osc52(text);
}
if self.config.enable_primary_selection && self.service.supports_primary_selection() {
let _ = self.service.write_primary_selection_text(text);
}
Ok(())
}
pub fn read(&self) -> Result<String, super::error::ClipboardError> {
self.service.read_clipboard_text()
}
}