Skip to main content

conduit_cli/core/
paths.rs

1use 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}