1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
use crate::lib::{read_config_file, search_config, search_config_index, write_config_file};
use crate::{check_option, Configs, Error, MyResult};
use clap::ArgMatches;

pub fn run(matches: &ArgMatches) -> MyResult<()> {
    // transfer config <key> <value>

    let list = matches.is_present("list");
    if list {
        return list_configs();
    }

    let key = matches.value_of("key").unwrap();
    let value = matches.value_of("value");

    let result = Configs::value_of(key);
    check_option(result, Error::NoConfigKey(String::from(key)))?;

    let mut config = read_config_file()?;
    if value.is_none() {
        let value = search_config(&config, key);
        if let Some(value) = value {
            println!("{}", value);
        }
        return Ok(());
    }
    let value = value.unwrap();

    let index = search_config_index(&config, key);
    match index {
        None => {
            config.push((String::from(key), String::from(value)));
        }
        Some(index) => {
            config[index] = (String::from(key), String::from(value));
        }
    }
    write_config_file(&config)?;

    Ok(())
}

fn list_configs() -> MyResult<()> {
    let configs = read_config_file()?;
    println!("{:#?}", configs);
    Ok(())
}