#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum PermissionState {
Granted,
Denied,
Unknown,
}
#[cfg(target_os = "macos")]
pub fn pasteboard_access_state() -> PermissionState {
use std::panic::AssertUnwindSafe;
let probed = std::panic::catch_unwind(AssertUnwindSafe(|| {
let cc = crate::clipboard::current_change_count();
cc >= 0
}));
match probed {
Ok(true) => PermissionState::Granted,
Ok(false) => PermissionState::Denied,
Err(_) => PermissionState::Unknown,
}
}
#[cfg(not(target_os = "macos"))]
pub fn pasteboard_access_state() -> PermissionState {
PermissionState::Unknown
}
pub fn notification_state() -> PermissionState {
PermissionState::Unknown
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn pasteboard_state_returns_a_value() {
let s = pasteboard_access_state();
assert!(matches!(
s,
PermissionState::Granted | PermissionState::Denied | PermissionState::Unknown
));
}
#[test]
fn notification_state_is_unknown_until_we_have_a_real_probe() {
assert_eq!(notification_state(), PermissionState::Unknown);
}
}