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 /// 当前用户 AppData\Roaming 目录(Windows: %APPDATA%)
17 UserAppDataRoaming,
18
19 // ========================================================================
20 // 应用路径(ZeroLaunch-rs 专用)
21 // ========================================================================
22 /// 应用数据根目录
23 /// 标准模式:$HOME/.ZeroLaunch-rs(跨平台统一,通过 dirs::home_dir() 获取)
24 /// 便携模式(feature="portable"):可执行文件所在目录
25 AppDataDir,
26 /// 日志目录(AppDataDir/logs)
27 AppLogDir,
28 /// 图标缓存目录(AppDataDir/icons)
29 AppIconCacheDir,
30 /// 配置目录(AppDataDir/config)
31 AppConfigDir,
32 /// 插件本地缓存目录(AppDataDir/plugin-cache)
33 AppCacheDir,
34}
35
36/// 路径解析器 trait,定义平台原语。
37/// 各平台实现通过系统 API 将 KnownPath 枚举映射为实际文件系统路径。
38pub trait PathResolver: Send + Sync {
39 /// 根据 KnownPath 类型解析实际文件系统路径。
40 /// 参数:path - 已知路径类型枚举。
41 /// 返回:解析后的路径字符串,失败返回 HostApiError。
42 fn resolve_path(&self, path: KnownPath) -> Result<String, HostApiError>;
43}