use std::fmt;
use std::sync::Arc;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ClipboardOperation {
ReadClipboard,
WriteClipboard,
ReadPrimarySelection,
WritePrimarySelection,
ReadImageClipboard,
WriteImageClipboard,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ClipboardError {
Unsupported {
operation: ClipboardOperation,
},
Provider {
operation: ClipboardOperation,
message: Arc<str>,
},
}
impl ClipboardError {
pub fn unsupported(operation: ClipboardOperation) -> Self {
Self::Unsupported { operation }
}
pub fn provider(operation: ClipboardOperation, message: impl Into<Arc<str>>) -> Self {
Self::Provider {
operation,
message: message.into(),
}
}
pub fn operation(&self) -> ClipboardOperation {
match self {
Self::Unsupported { operation } => *operation,
Self::Provider { operation, .. } => *operation,
}
}
}
impl fmt::Display for ClipboardError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Unsupported { operation } => {
write!(f, "clipboard operation {:?} is unsupported", operation)
}
Self::Provider { operation, message } => {
write!(f, "clipboard operation {:?} failed: {}", operation, message)
}
}
}
}
impl std::error::Error for ClipboardError {}