mddd_std/
cli_utils.rs

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}