mod backend;
mod error;
mod format;
mod image_data;
mod uri;
use std::path::PathBuf;
pub use error::ClipboardError;
pub use image_data::RgbaImageData;
const DISABLE_CLIPBOARD_ENV: &str = "AGENTTY_DISABLE_CLIPBOARD";
pub struct Clipboard {
backend: Box<dyn backend::ClipboardBackend>,
}
impl Clipboard {
#[cfg(target_os = "macos")]
pub fn new() -> Result<Self, ClipboardError> {
if let Some(error) = Self::disabled_by_env() {
return Err(error);
}
Ok(Self {
backend: backend::new_backend(),
})
}
#[cfg(not(target_os = "macos"))]
pub fn new() -> Result<Self, ClipboardError> {
if let Some(error) = Self::disabled_by_env() {
return Err(error);
}
Ok(Self {
backend: backend::new_backend()?,
})
}
pub fn read_text(&mut self) -> Result<String, ClipboardError> {
self.backend.read_text()
}
pub fn read_file_list(&mut self) -> Result<Vec<PathBuf>, ClipboardError> {
self.backend.read_file_list()
}
pub fn read_image_rgba(&mut self) -> Result<RgbaImageData, ClipboardError> {
self.backend.read_image_rgba()
}
fn disabled_by_env() -> Option<ClipboardError> {
std::env::var_os(DISABLE_CLIPBOARD_ENV).map(|_| ClipboardError::Unavailable {
reason: format!("clipboard access is disabled by `{DISABLE_CLIPBOARD_ENV}`"),
})
}
}