ferrous_forge/config/hierarchy/
levels.rs1use crate::{Error, Result};
4use std::path::PathBuf;
5
6#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
8pub enum ConfigLevel {
9 System,
11 User,
13 Project,
15}
16
17impl ConfigLevel {
18 pub fn path(&self) -> Result<PathBuf> {
24 match self {
25 ConfigLevel::System => Ok(PathBuf::from("/etc/ferrous-forge/config.toml")),
26 ConfigLevel::User => {
27 let config_dir = dirs::config_dir()
28 .ok_or_else(|| Error::config("Could not find config directory"))?;
29 Ok(config_dir.join("ferrous-forge").join("config.toml"))
30 }
31 ConfigLevel::Project => Ok(PathBuf::from(".ferrous-forge/config.toml")),
32 }
33 }
34
35 pub fn display_name(&self) -> &'static str {
37 match self {
38 ConfigLevel::System => "System",
39 ConfigLevel::User => "User",
40 ConfigLevel::Project => "Project",
41 }
42 }
43}
44
45#[cfg(test)]
46mod tests {
47 use super::*;
48
49 #[test]
50 fn test_config_level_ordering() {
51 assert!(ConfigLevel::System < ConfigLevel::User);
52 assert!(ConfigLevel::User < ConfigLevel::Project);
53 }
54}