//! Access the clipboard. use crate::core::clipboard::Kind; use crate::futures::futures::channel::oneshot; use crate::task::{self, Task}; /// A clipboard action to be performed by some [`Task`]. /// /// [`Task`]: crate::Task #[derive(Debug)] pub enum Action { /// Read the clipboard and produce `T` with the result. Read { /// The clipboard target. target: Kind, /// The channel to send the read contents. channel: oneshot::Sender>, }, /// Write the given contents to the clipboard. Write { /// The clipboard target. target: Kind, /// The contents to be written. contents: String, }, } /// Read the current contents of the clipboard. pub fn read() -> Task> { task::oneshot(|channel| { crate::Action::Clipboard(Action::Read { target: Kind::Standard, channel, }) }) } /// Read the current contents of the primary clipboard. pub fn read_primary() -> Task> { task::oneshot(|channel| { crate::Action::Clipboard(Action::Read { target: Kind::Primary, channel, }) }) } /// Write the given contents to the clipboard. pub fn write(contents: String) -> Task { task::effect(crate::Action::Clipboard(Action::Write { target: Kind::Standard, contents, })) } /// Write the given contents to the primary clipboard. pub fn write_primary(contents: String) -> Task { task::effect(crate::Action::Clipboard(Action::Write { target: Kind::Primary, contents, })) }