composition_cli/context/
mod.rs

1pub mod cli;
2pub mod config;
3
4use std::path::PathBuf;
5
6use cli::Cli;
7use config::Config;
8
9#[derive(Debug)]
10pub struct AppContext {
11    pub path: PathBuf,
12    pub scale_bar: f32,
13    pub config: Config,
14    pub config_loaded: bool,
15}
16
17impl AppContext {
18    pub fn from_cli(cli: Cli) -> Self {
19        let (mut config, config_loaded) = Config::from_config();
20
21        // apply CLI overrides to config
22        Self::apply_cli_overrides(&mut config, &cli);
23
24        AppContext {
25            path: cli.path,
26            scale_bar: cli.scale_bar,
27            config,
28            config_loaded,
29        }
30    }
31
32    fn apply_cli_overrides(config: &mut Config, cli: &Cli) {
33        // override boolean flags
34        if let Some(use_color) = cli.use_color {
35            config.use_color = use_color;
36        }
37
38        if let Some(respect_gitignore) = cli.respect_gitignore {
39            config.respect_gitignore = respect_gitignore;
40        }
41
42        if let Some(ignore_dotfolders) = cli.ignore_dotfolders {
43            config.ignore_dotfolders = ignore_dotfolders;
44        }
45
46        if let Some(ignore_dotfiles) = cli.ignore_dotfiles {
47            config.ignore_dotfiles = ignore_dotfiles;
48        }
49
50        if let Some(ignore_empty_lines) = cli.ignore_empty_lines {
51            config.ignore_empty_lines = ignore_empty_lines;
52        }
53    }
54}