raz_core/
config_adapter.rs1use anyhow::Result;
2use raz_config::{CommandOverride, EffectiveConfig, GlobalConfig, WorkspaceConfig};
3use std::path::Path;
4use std::sync::Arc;
5
6pub 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}