contract_cli/commands/
config.rs1use 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}