Skip to main content

zerolaunch_plugin_api/platform/
capabilities.rs

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