//! Portapapeles como servicio: la app instala el del sistema y las pruebas usan memoria.
pub trait ClipboardProvider {
fn read(&mut self) -> Option<String>;
fn write(&mut self, text: String) -> Result<(), String>;
/// PNG del sistema, solo bajo petición; los proveedores de texto no necesitan implementarlo.
fn read_image(&mut self) -> Result<Option<Vec<u8>>, String> {
Ok(None)
}
}
#[derive(Default)]
pub struct MemoryClipboard {
content: Option<String>,
}
impl ClipboardProvider for MemoryClipboard {
fn read(&mut self) -> Option<String> {
self.content.clone()
}
fn write(&mut self, text: String) -> Result<(), String> {
self.content = Some(text);
Ok(())
}
}