kaspa_cli_lib/modules/
settings.rs

1use crate::imports::*;
2
3#[derive(Default, Handler)]
4#[help("Manage application settings")]
5pub struct Settings;
6
7impl Settings {
8    async fn main(self: Arc<Self>, ctx: &Arc<dyn Context>, _argv: Vec<String>, _cmd: &str) -> Result<()> {
9        let ctx = ctx.clone().downcast_arc::<KaspaCli>()?;
10
11        tprintln!(ctx, "\nSettings:\n");
12        // let list = WalletSettings::list();
13        let list = WalletSettings::into_iter()
14            .map(|setting| {
15                let value: String = ctx.wallet().settings().get(setting.clone()).unwrap_or_else(|| "-".to_string());
16                let descr = setting.describe();
17                (setting.as_str().to_lowercase(), value, descr)
18            })
19            .collect::<Vec<(_, _, _)>>();
20        let c1 = list.iter().map(|(c, _, _)| c.len()).fold(0, |a, b| a.max(b)) + 4;
21        let c2 = list.iter().map(|(_, c, _)| c.len()).fold(0, |a, b| a.max(b)) + 4;
22
23        list.iter().for_each(|(k, v, d)| {
24            tprintln!(ctx, "{}: {} \t {}", k.pad_to_width_with_alignment(c1, pad::Alignment::Right), v.pad_to_width(c2), d);
25        });
26
27        tprintln!(ctx);
28
29        /*
30
31                this is deprecated in favor of dedicated `network`, `server` and `open <wallet name>` commands
32
33
34                else if argv.len() != 2 {
35                    tprintln!(ctx, "usage: set <key> <value>");
36                    return Ok(());
37                } else {
38                    let key = argv[0].as_str();
39                    let value = argv[1].as_str().trim();
40
41                    if value.contains(' ') || value.contains('\t') {
42                        return Err(Error::Custom("Whitespace in settings is not allowed".to_string()));
43                    }
44
45                    match key {
46                        "network" => {
47                            let network: NetworkId = value.parse()?;
48                            ctx.wallet().settings().set(WalletSettings::Network, network).await?;
49                        }
50                        "server" => {
51                            ctx.wallet().settings().set(WalletSettings::Server, value).await?;
52                        }
53                        "wallet" => {
54                            ctx.wallet().settings().set(WalletSettings::Wallet, value).await?;
55                        }
56                        // "scrollback" => {
57                        //     ctx.wallet().settings().set(WalletSettings::Wallet, value).await?;
58                        // }
59                        _ => return Err(Error::Custom(format!("Unknown setting '{}'", key))),
60                    }
61                    ctx.wallet().settings().try_store().await?;
62                }
63        */
64
65        Ok(())
66    }
67}