zagens_runtime/cli/
context.rs1use std::path::{Path, PathBuf};
4
5use anyhow::Result;
6
7use super::args::Cli;
8use super::setup::merge_project_config;
9use crate::config::Config;
10
11#[derive(Debug, Clone)]
12pub struct CliContext {
13 pub config: Config,
14 pub workspace: PathBuf,
15}
16
17pub fn resolve_workspace(cli: &Cli) -> PathBuf {
18 cli.workspace
19 .clone()
20 .unwrap_or_else(|| std::env::current_dir().unwrap_or_else(|_| PathBuf::from(".")))
21}
22
23pub fn load_cli_context(cli: &Cli) -> Result<CliContext> {
24 let profile = cli
25 .profile
26 .clone()
27 .or_else(|| std::env::var("DEEPSEEK_PROFILE").ok());
28 let mut config = Config::load(cli.config.clone(), profile.as_deref())?;
29 cli.feature_toggles.apply(&mut config)?;
30 let workspace = resolve_workspace(cli);
31 if !cli.no_project_config {
32 merge_project_config(&mut config, &workspace);
33 }
34 Ok(CliContext { config, workspace })
35}
36
37pub fn config_path_for_report(cli: &Cli) -> PathBuf {
38 cli.config.clone().unwrap_or_else(default_config_path)
39}
40
41pub fn default_config_path() -> PathBuf {
42 std::env::var("DEEPSEEK_CONFIG_PATH")
43 .ok()
44 .map(PathBuf::from)
45 .unwrap_or_else(|| {
46 zagens_config::user_data_path("config.toml")
47 .unwrap_or_else(|_| PathBuf::from("config.toml"))
48 })
49}
50
51pub fn display_path(path: &Path) -> String {
52 crate::utils::display_path(path)
53}