Skip to main content

oxide_cli/
paths.rs

1use std::{fs, path::PathBuf};
2
3use anyhow::Result;
4
5pub struct OxidePaths {
6  pub home: PathBuf,
7  pub config: PathBuf,
8  pub version_check: PathBuf,
9  pub cache: PathBuf,
10  pub templates: PathBuf,
11  pub auth: PathBuf,
12  pub addons: PathBuf,
13  pub addons_index: PathBuf,
14}
15
16impl OxidePaths {
17  pub fn new() -> Result<Self> {
18    let home_dir =
19      dirs::home_dir().ok_or_else(|| anyhow::anyhow!("Could not find home directory"))?;
20
21    let oxide_home = home_dir.join(".oxide");
22
23    Ok(Self {
24      home: oxide_home.clone(),
25      config: oxide_home.join("config.json"),
26      version_check: oxide_home.join("version_check.json"),
27      cache: oxide_home.join("cache"),
28      templates: oxide_home.join("cache").join("templates"),
29      auth: oxide_home.join("auth.json"),
30      addons: oxide_home.join("cache").join("addons"),
31      addons_index: oxide_home
32        .join("cache")
33        .join("addons")
34        .join("oxide-addons.json"),
35    })
36  }
37
38  pub fn ensure_directories(&self) -> Result<()> {
39    fs::create_dir_all(&self.home)?;
40    fs::create_dir_all(&self.cache)?;
41    fs::create_dir_all(&self.templates)?;
42    fs::create_dir_all(&self.addons)?;
43    Ok(())
44  }
45}