Skip to main content

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}