Skip to main content

contract_cli/commands/
config.rs

1use crate::cli::ConfigCmd;
2use crate::config;
3use crate::error::Result;
4use crate::output::{print_raw, print_success, Ctx};
5
6pub fn run(cmd: ConfigCmd, ctx: Ctx) -> Result<()> {
7    match cmd {
8        ConfigCmd::Show => {
9            let cfg = config::load()?;
10            print_raw(&cfg);
11            Ok(())
12        }
13        ConfigCmd::Path => {
14            let p = config::config_path()?.display().to_string();
15            print_success(ctx, &p, |p| println!("{p}"));
16            Ok(())
17        }
18        ConfigCmd::Set { key, value } => {
19            let paths = finance_core::paths::Paths::resolve()?;
20            let mut cfg = config::load()?;
21            match key.as_str() {
22                "default_issuer" => {
23                    cfg.default_issuer = if value == "unset" { None } else { Some(value.clone()) };
24                }
25                "default_template" => {
26                    cfg.default_template = value.clone();
27                }
28                "open_pdf" => {
29                    cfg.open_pdf = value.parse().unwrap_or(true);
30                }
31                "self_update" => {
32                    cfg.self_update = value.parse().unwrap_or(true);
33                }
34                _ => {
35                    return Err(crate::error::AppError::InvalidInput(format!(
36                        "unknown config key '{key}' (try: default_issuer, default_template, open_pdf, self_update)"
37                    )));
38                }
39            }
40            cfg.save(&paths)?;
41            print_success(ctx, &cfg, |_| println!("config saved"));
42            Ok(())
43        }
44    }
45}