zerolaunch_plugin_api/services/path/path_resolver.rs
1use crate::host::error::HostApiError;
2
3/// 已知路径类型枚举,列出所有平台相关的用户目录。
4/// 各平台实现将枚举值映射为实际文件系统路径。
5#[derive(Debug, Clone, Copy, Hash, Eq, PartialEq)]
6pub enum KnownPath {
7 // ========================================================================
8 // 系统路径(平台相关)
9 // ========================================================================
10 /// 公共开始菜单目录(Windows: C:\ProgramData\Microsoft\Windows\Start Menu)
11 CommonStartMenu,
12 /// 当前用户开始菜单目录(Windows: %APPDATA%\Microsoft\Windows\Start Menu)
13 UserStartMenu,
14 /// 当前用户桌面目录(Windows: %USERPROFILE%\Desktop)
15 UserDesktop,
16 /// 公共桌面目录(Windows: C:\Users\Public\Desktop),存放所有用户共享的桌面快捷方式
17 CommonDesktop,
18 /// 当前用户 AppData\Roaming 目录(Windows: %APPDATA%)
19 UserAppDataRoaming,
20
21 // ========================================================================
22 // 应用路径(ZeroLaunch-rs 专用)
23 // ========================================================================
24 /// 应用数据根目录
25 /// 标准模式:$HOME/.ZeroLaunch-rs(跨平台统一,通过 dirs::home_dir() 获取)
26 /// 便携模式(feature="portable"):可执行文件所在目录
27 AppDataDir,
28 /// 日志目录(AppDataDir/logs)
29 AppLogDir,
30 /// 图标缓存目录(AppDataDir/icons)
31 AppIconCacheDir,
32 /// 配置目录(AppDataDir/config)
33 AppConfigDir,
34 /// 插件本地缓存目录(AppDataDir/plugin-cache)
35 AppCacheDir,
36}
37
38/// 路径解析器 trait,定义平台原语。
39/// 各平台实现通过系统 API 将 KnownPath 枚举映射为实际文件系统路径。
40pub trait PathResolver: Send + Sync {
41 /// 根据 KnownPath 类型解析实际文件系统路径。
42 /// 参数:path - 已知路径类型枚举。
43 /// 返回:解析后的路径字符串,失败返回 HostApiError。
44 fn resolve_path(&self, path: KnownPath) -> Result<String, HostApiError>;
45}