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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
use printnanny_services::config::{ConfigFormat, PrintNannyConfig};
use printnanny_services::error::ServiceError;
use printnanny_services::printnanny_api::ApiService;
use std::io::{self, Write};
pub struct ConfigCommand;
impl ConfigCommand {
pub async fn handle(sub_m: &clap::ArgMatches) -> Result<(), ServiceError> {
let config: PrintNannyConfig = PrintNannyConfig::new()?;
match sub_m.subcommand() {
Some(("get", args)) => {
let key = args.value_of("key");
let f: ConfigFormat = args.value_of_t("format").unwrap();
let v = match f {
ConfigFormat::Json => match key {
Some(k) => {
let data = PrintNannyConfig::find_value(k)?;
serde_json::to_vec_pretty(&data)?
}
None => {
let data = PrintNannyConfig::new()?;
serde_json::to_vec_pretty(&data)?
}
},
ConfigFormat::Toml => match key {
Some(k) => {
let data = PrintNannyConfig::find_value(k)?;
toml::ser::to_vec(&data)?
}
None => {
let data = PrintNannyConfig::new()?;
toml::ser::to_vec(&data)?
}
},
};
io::stdout().write_all(&v)?;
}
Some(("set", args)) => {
let key = args.value_of("key").unwrap();
let value = args.value_of("value").unwrap();
let figment = PrintNannyConfig::figment()?;
let data = figment::providers::Serialized::global(key, &value);
let figment = figment.merge(data);
let config: PrintNannyConfig = figment.extract()?;
config.try_save()?;
}
Some(("sync", _args)) => {
let config = PrintNannyConfig::new()?;
let mut service = ApiService::new(config)?;
service.sync().await?;
}
Some(("show", args)) => {
let f: ConfigFormat = args.value_of_t("format").unwrap();
let v = match f {
ConfigFormat::Json => serde_json::to_vec_pretty(&config)?,
ConfigFormat::Toml => toml::ser::to_vec(&config)?,
};
io::stdout().write_all(&v)?;
}
_ => panic!("Expected get|set|sync|show subcommand"),
};
Ok(())
}
}