use super::{WebMediaLease, WebPermissionError, WebPermissionKind};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum WebNotificationPermission {
Granted,
Denied,
Default,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum WebPermissionStatus {
Granted,
Rejected,
Denied,
Default,
Unavailable,
}
pub enum WebPermissionOutcome {
Unavailable(WebPermissionKind),
Rejected {
kind: WebPermissionKind,
error: WebPermissionError,
},
GeolocationGranted,
MediaGranted(WebMediaLease),
Notification(WebNotificationPermission),
}
impl WebPermissionOutcome {
#[must_use]
pub fn kind(&self) -> WebPermissionKind {
match self {
Self::Unavailable(kind) | Self::Rejected { kind, .. } => *kind,
Self::GeolocationGranted => WebPermissionKind::Geolocation,
Self::MediaGranted(lease) => lease.kind(),
Self::Notification(_) => WebPermissionKind::Notifications,
}
}
#[must_use]
pub const fn status(&self) -> WebPermissionStatus {
match self {
Self::Unavailable(_) => WebPermissionStatus::Unavailable,
Self::Rejected { .. } => WebPermissionStatus::Rejected,
Self::GeolocationGranted
| Self::MediaGranted(_)
| Self::Notification(WebNotificationPermission::Granted) => {
WebPermissionStatus::Granted
}
Self::Notification(WebNotificationPermission::Denied) => WebPermissionStatus::Denied,
Self::Notification(WebNotificationPermission::Default) => WebPermissionStatus::Default,
}
}
#[must_use]
pub const fn error(&self) -> Option<&WebPermissionError> {
match self {
Self::Rejected { error, .. } => Some(error),
_ => None,
}
}
}