codesnap 0.13.2

Pure Rust library for generating beautiful code snapshots
Documentation
use arboard::ImageData;
#[cfg(target_os = "linux")]
use arboard::SetExtLinux;
#[cfg(target_os = "linux")]
use std::thread;

pub struct Clipboard {
    aboard_clipboard: arboard::Clipboard,
}

pub type Result<T> = std::result::Result<T, arboard::Error>;

impl Clipboard {
    pub fn new() -> Result<Self> {
        Ok(Self {
            aboard_clipboard: arboard::Clipboard::new()?,
        })
    }

    pub fn set_image(&mut self, image_data: ImageData) -> Result<()> {
        #[cfg(target_os = "linux")]
        thread::scope(|s| -> Result<()> {
            s.spawn(|| -> Result<()> { self.aboard_clipboard.set().wait().image(image_data) })
                .join()
                .unwrap()
        })?;

        #[cfg(not(target_os = "linux"))]
        self.aboard_clipboard.set_image(image_data)?;

        Ok(())
    }

    pub fn set_text(&mut self, text: &str) -> Result<()> {
        #[cfg(target_os = "linux")]
        thread::scope(|s| -> Result<()> {
            s.spawn(move || -> Result<()> { self.aboard_clipboard.set().wait().text(text) })
                .join()
                .unwrap()
        })?;

        #[cfg(not(target_os = "linux"))]
        self.aboard_clipboard.set_text(text)?;

        Ok(())
    }

    pub fn read(&mut self) -> Result<String> {
        self.aboard_clipboard.get_text()
    }
}