use std::collections::HashSet;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, Hash, Eq, PartialEq, PartialOrd, Ord, Serialize, Deserialize)]
pub enum PlatformCapability {
#[serde(rename = "iconExtraction")]
IconExtraction,
#[serde(rename = "shellOpen")]
ShellOpen,
#[serde(rename = "runAsAdmin")]
RunAsAdmin,
#[serde(rename = "appEnumeration")]
AppEnumeration,
#[serde(rename = "appLaunch")]
AppLaunch,
#[serde(rename = "windowActivation")]
WindowActivation,
#[serde(rename = "autoStart")]
AutoStart,
#[serde(rename = "hotkeyListening")]
HotkeyListening,
#[serde(rename = "installationMonitoring")]
InstallationMonitoring,
}
#[derive(Clone)]
pub struct PlatformCapabilities {
capabilities: HashSet<PlatformCapability>,
}
impl PlatformCapabilities {
pub fn new(capabilities: HashSet<PlatformCapability>) -> Self {
Self { capabilities }
}
pub fn has(&self, capability: PlatformCapability) -> bool {
self.capabilities.contains(&capability)
}
pub fn all(&self) -> &HashSet<PlatformCapability> {
&self.capabilities
}
pub fn to_list(&self) -> Vec<PlatformCapability> {
let mut list: Vec<PlatformCapability> = self.capabilities.iter().copied().collect();
list.sort();
list
}
}