sql_cli/utils/
app_paths.rs

1use std::error::Error;
2use std::fs;
3use std::path::PathBuf;
4
5pub struct AppPaths;
6
7impl AppPaths {
8    pub fn data_dir() -> Result<PathBuf, Box<dyn Error>> {
9        let data_dir = dirs::data_dir()
10            .ok_or("Cannot determine data directory")?
11            .join("sql-cli");
12
13        fs::create_dir_all(&data_dir)?;
14        Ok(data_dir)
15    }
16
17    pub fn cache_dir() -> Result<PathBuf, Box<dyn Error>> {
18        let cache_dir = dirs::cache_dir()
19            .ok_or("Cannot determine cache directory")?
20            .join("sql-cli");
21
22        fs::create_dir_all(&cache_dir)?;
23        Ok(cache_dir)
24    }
25
26    pub fn history_file() -> Result<PathBuf, Box<dyn Error>> {
27        Ok(Self::data_dir()?.join("history.json"))
28    }
29
30    pub fn schemas_file() -> Result<PathBuf, Box<dyn Error>> {
31        Ok(Self::data_dir()?.join("schemas.json"))
32    }
33
34    pub fn cache_metadata_file() -> Result<PathBuf, Box<dyn Error>> {
35        Ok(Self::cache_dir()?.join("metadata.json"))
36    }
37
38    pub fn cache_data_dir() -> Result<PathBuf, Box<dyn Error>> {
39        let data_dir = Self::cache_dir()?.join("data");
40        fs::create_dir_all(&data_dir)?;
41        Ok(data_dir)
42    }
43}