conduit_cli/core/
paths.rs1use crate::core::error::{CoreError, CoreResult};
2use std::path::{Path, PathBuf};
3
4#[derive(Debug, Clone)]
5pub struct CorePaths {
6 pub project_dir: PathBuf,
7 pub config_path: PathBuf,
8 pub lock_path: PathBuf,
9 pub mods_dir: PathBuf,
10 pub cache_dir: PathBuf,
11}
12
13impl CorePaths {
14 pub fn from_project_dir(project_dir: impl Into<PathBuf>) -> CoreResult<Self> {
15 let project_dir = project_dir.into();
16 let cache_dir = dirs::data_local_dir()
17 .ok_or(CoreError::MissingLocalDataDir)?
18 .join("conduit")
19 .join("cache");
20
21 Ok(Self {
22 config_path: project_dir.join("conduit.json"),
23 lock_path: project_dir.join("conduit.lock"),
24 mods_dir: project_dir.join("mods"),
25 project_dir,
26 cache_dir,
27 })
28 }
29
30 pub fn config_path(&self) -> &Path {
31 &self.config_path
32 }
33
34 pub fn lock_path(&self) -> &Path {
35 &self.lock_path
36 }
37
38 pub fn mods_dir(&self) -> &Path {
39 &self.mods_dir
40 }
41
42 pub fn cache_dir(&self) -> &Path {
43 &self.cache_dir
44 }
45}