zerolaunch_plugin_api/platform/
capabilities.rs1use std::collections::HashSet;
2
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Copy, Hash, Eq, PartialEq, PartialOrd, Ord, Serialize, Deserialize)]
9pub enum PlatformCapability {
10 #[serde(rename = "iconExtraction")]
12 IconExtraction,
13 #[serde(rename = "shellOpen")]
15 ShellOpen,
16 #[serde(rename = "runAsAdmin")]
18 RunAsAdmin,
19 #[serde(rename = "appEnumeration")]
21 AppEnumeration,
22 #[serde(rename = "appLaunch")]
24 AppLaunch,
25 #[serde(rename = "windowActivation")]
27 WindowActivation,
28 #[serde(rename = "autoStart")]
30 AutoStart,
31 #[serde(rename = "hotkeyListening")]
33 HotkeyListening,
34 #[serde(rename = "installationMonitoring")]
36 InstallationMonitoring,
37}
38
39#[derive(Clone)]
42pub struct PlatformCapabilities {
43 capabilities: HashSet<PlatformCapability>,
44}
45
46impl PlatformCapabilities {
47 pub fn new(capabilities: HashSet<PlatformCapability>) -> Self {
51 Self { capabilities }
52 }
53
54 pub fn has(&self, capability: PlatformCapability) -> bool {
58 self.capabilities.contains(&capability)
59 }
60
61 pub fn all(&self) -> &HashSet<PlatformCapability> {
65 &self.capabilities
66 }
67
68 pub fn to_list(&self) -> Vec<PlatformCapability> {
72 let mut list: Vec<PlatformCapability> = self.capabilities.iter().copied().collect();
73 list.sort();
74 list
75 }
76}