mongodb_atlas_cli/
path.rs

1use std::path::PathBuf;
2
3use thiserror::Error;
4
5#[derive(Clone, Debug, Error, PartialEq, Eq)]
6pub enum GetCLICfgHomeDirectoryError {
7    #[error("Could not determine config directory")]
8    CouldNotDetermineConfigDir,
9}
10
11/// Get the path to the config directory for the current platform
12///
13/// On macOS, this is `~/Library/Application Support/atlascli`
14/// On Linux, this is `~/.config/atlascli`
15/// On Windows, this is `%APPDATA%\atlascli`
16pub fn home_directory() -> Result<PathBuf, GetCLICfgHomeDirectoryError> {
17    // Get the config directory for the current platform
18    let config_dir =
19        dirs::config_dir().ok_or(GetCLICfgHomeDirectoryError::CouldNotDetermineConfigDir)?;
20
21    // Join the config directory with "atlascli"
22    // On macOS, this is ~/Library/Application Support/atlascli
23    let cli_config_dir = config_dir.join("atlascli");
24
25    // Return the path to the config directory
26    Ok(cli_config_dir)
27}
28
29#[derive(Clone, Debug, Error, PartialEq, Eq)]
30pub enum GetCLICfgFilePathError {
31    #[error("Could not determine config directory")]
32    CouldNotDetermineConfigDir {
33        #[from]
34        source: GetCLICfgHomeDirectoryError,
35    },
36}
37
38/// Get the path to the config file for the current platform
39///
40/// On macOS, this is `~/Library/Application Support/atlascli/config.toml`
41/// On Linux, this is `~/.config/atlascli/config.toml`
42/// On Windows, this is `%APPDATA%\atlascli\config.toml`
43pub fn config_file() -> Result<PathBuf, GetCLICfgFilePathError> {
44    // Get the path to the config directory for the current platform
45    let cli_config_dir = home_directory()?;
46
47    // Join the config directory with "config.toml"
48    // On macOS, this is ~/Library/Application Support/atlascli/config.toml
49    let config_file_path = cli_config_dir.join("config.toml");
50
51    // Return the path to the config file
52    Ok(config_file_path)
53}