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}