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    /// 当前用户 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}