Skip to main content

zerolaunch_plugin_api/platform/
capabilities.rs

1use std::collections::HashSet;
2
3use serde::{Deserialize, Serialize};
4
5/// 平台能力枚举。
6/// 列举 Plugin SDK 可能暴露的所有平台能力,不同平台的支撑情况不同。
7/// 跨进程经 `host/platform.capabilities` 以 camelCase 名称下发,插件据此降级。
8#[derive(Debug, Clone, Copy, Hash, Eq, PartialEq, PartialOrd, Ord, Serialize, Deserialize)]
9pub enum PlatformCapability {
10    /// 图标提取:从文件/网址/扩展名中提取图标
11    #[serde(rename = "iconExtraction")]
12    IconExtraction,
13    /// Shell 打开:使用系统默认方式打开文件/网址/文件夹
14    #[serde(rename = "shellOpen")]
15    ShellOpen,
16    /// 以管理员身份运行
17    #[serde(rename = "runAsAdmin")]
18    RunAsAdmin,
19    /// 应用枚举:发现系统中已安装的应用(含沙箱/容器应用)
20    #[serde(rename = "appEnumeration")]
21    AppEnumeration,
22    /// 应用启动:通过平台专属 API 启动应用
23    #[serde(rename = "appLaunch")]
24    AppLaunch,
25    /// 窗口激活:根据进程名或标题激活已存在的窗口
26    #[serde(rename = "windowActivation")]
27    WindowActivation,
28    /// 自启动管理:管理系统开机自启动
29    #[serde(rename = "autoStart")]
30    AutoStart,
31    /// 按键监听:全局快捷键和双击 Ctrl 监听
32    #[serde(rename = "hotkeyListening")]
33    HotkeyListening,
34    /// 安装监控:监控文件系统变化(如开始菜单),检测程序安装/卸载
35    #[serde(rename = "installationMonitoring")]
36    InstallationMonitoring,
37}
38
39/// 平台能力集合。
40/// 封装当前平台支持的能力,提供便捷的查询接口。
41#[derive(Clone)]
42pub struct PlatformCapabilities {
43    capabilities: HashSet<PlatformCapability>,
44}
45
46impl PlatformCapabilities {
47    /// 创建包含指定能力集合的 PlatformCapabilities。
48    /// 参数:capabilities - 平台支持的能力集合。
49    /// 返回:初始化后的 PlatformCapabilities。
50    pub fn new(capabilities: HashSet<PlatformCapability>) -> Self {
51        Self { capabilities }
52    }
53
54    /// 查询当前平台是否支持指定能力。
55    /// 参数:capability - 待查询的能力。
56    /// 返回:支持返回 true,不支持返回 false。
57    pub fn has(&self, capability: PlatformCapability) -> bool {
58        self.capabilities.contains(&capability)
59    }
60
61    /// 获取当前平台所有支持的能力集合。
62    /// 参数:无。
63    /// 返回:能力集合的不可变引用。
64    pub fn all(&self) -> &HashSet<PlatformCapability> {
65        &self.capabilities
66    }
67
68    /// 获取按固定顺序排列的能力列表(供跨进程传输)。
69    /// 参数:无。
70    /// 返回:按枚举声明顺序排序的能力名列表。
71    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}