1use crate::cli_params::CliParamsError;
2use mddd_traits::IParser;
3
4pub struct CliUtils {}
5
6impl CliUtils {
7 pub fn proc_cli_err_s<T, P: IParser<T>>(
8 key: &str,
9 res: Result<Option<&str>, CliParamsError>,
10 default: Option<T>,
11 ) -> Result<T, String> {
12 match (res, default) {
13 (Ok(Some(val)), _) => {
14 P::parse(val).map_err(|msg| format!("Invalid field({}): {}", key, msg))
15 }
16 (Ok(None), Some(val)) => Ok(val),
17 (Ok(None), None) => Err(format!("Field not set: {}", key)),
18 (Err(err), _) => Err(format!("Invalid field({}): {:?}", key, err)),
19 }
20 }
21
22 pub fn proc_cli_err_m<T, P: IParser<T>>(
23 key: &str,
24 res: Result<Vec<&str>, CliParamsError>,
25 ) -> Result<Vec<T>, String> {
26 let as_str = match res {
27 Ok(val) => val,
28 Err(err) => {
29 let msg = format!("Invalid field({}): {:?}", key, err);
30 return Err(msg);
31 }
32 };
33 as_str
34 .into_iter()
35 .map(|src: &str| -> Result<T, String> { P::parse(src) })
36 .collect::<Result<Vec<T>, String>>()
37 .map_err(|msg| format!("Invalid field({}): {}", key, msg))
38 }
39}