aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/mozart/src/commands/base_config.rs
blob: c10e7e7a3d24559c3182cea6c9ed8edfaa88cff4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
use std::path::PathBuf;

use mozart_core::composer::composer_home;
use mozart_core::config_source::JsonConfigSource;

/// Mirrors Composer's `BaseConfigCommand`: resolves the target config file path
/// and enforces the `--file` ↔ `--global` mutual exclusivity.
pub(crate) struct BaseConfigContext {
    pub config_source: JsonConfigSource,
}

impl BaseConfigContext {
    pub fn initialize(global: bool, file: Option<&str>, cli: &super::Cli) -> anyhow::Result<Self> {
        if global && file.is_some() {
            anyhow::bail!("--file and --global can not be combined");
        }

        let path: PathBuf = if global {
            composer_home().join("config.json")
        } else if let Some(f) = file {
            PathBuf::from(f)
        } else {
            cli.working_dir()?.join("composer.json")
        };

        Ok(Self {
            config_source: JsonConfigSource::new(path, false),
        })
    }
}