raz_core/
config_adapter.rs

1use anyhow::Result;
2use raz_config::{CommandOverride, EffectiveConfig, GlobalConfig, WorkspaceConfig};
3use std::path::Path;
4use std::sync::Arc;
5
6/// Adapter to maintain compatibility with the old ConfigManager interface
7pub struct ConfigManager {
8    global_config: Arc<GlobalConfig>,
9}
10
11impl ConfigManager {
12    pub fn new() -> Result<Self> {
13        let global_config = GlobalConfig::load()
14            .map_err(|e| anyhow::anyhow!("Failed to load global config: {}", e))?;
15
16        Ok(Self {
17            global_config: Arc::new(global_config),
18        })
19    }
20
21    pub fn get_effective_config(&self, workspace: &Path) -> EffectiveConfig {
22        let workspace_config = WorkspaceConfig::load(workspace).ok().flatten();
23        EffectiveConfig::new((*self.global_config).clone(), workspace_config)
24    }
25
26    pub fn get_command_override(&self, workspace: &Path, key: &str) -> Option<CommandOverride> {
27        let effective = self.get_effective_config(workspace);
28        effective.overrides.overrides.get(key).cloned()
29    }
30
31    pub fn set_command_override(
32        &mut self,
33        workspace: &Path,
34        key: String,
35        override_config: CommandOverride,
36    ) -> Result<()> {
37        let mut workspace_config = WorkspaceConfig::load(workspace)
38            .map_err(|e| anyhow::anyhow!("Failed to load workspace config: {}", e))?
39            .unwrap_or_else(|| WorkspaceConfig::new(workspace.to_path_buf()));
40
41        if workspace_config.overrides.is_none() {
42            workspace_config.overrides =
43                Some(raz_config::override_config::OverrideCollection::new());
44        }
45
46        workspace_config
47            .overrides
48            .as_mut()
49            .unwrap()
50            .overrides
51            .insert(key, override_config);
52
53        workspace_config
54            .save()
55            .map_err(|e| anyhow::anyhow!("Failed to save workspace config: {}", e))
56    }
57
58    pub fn set_command_override_from_input(
59        &mut self,
60        workspace: &Path,
61        key: String,
62        command: &str,
63        input: &str,
64    ) -> Result<()> {
65        use raz_override::parse_override_to_command;
66
67        let override_config = parse_override_to_command(command, input)
68            .map_err(|e| anyhow::anyhow!("Failed to parse override: {}", e))?;
69
70        self.set_command_override(workspace, key, override_config)
71    }
72}