use std::fmt::Display; use std::io::Stdin; use std::str::FromStr; use clap::ArgMatches; pub use {clap, serde}; pub fn default_arg_parser(arg: &str, _: &ArgMatches) -> Result where T: FromStr, T::Err: Display, { arg.parse() .map_err(|e| clap::Error::raw(clap::error::ErrorKind::ValueValidation, e)) } pub fn default_stdin_parser(stdin: &mut Stdin, _: &ArgMatches) -> Result where T: FromStr, T::Err: Display, { let mut s = String::new(); stdin .read_line(&mut s) .map_err(|e| clap::Error::raw(clap::error::ErrorKind::Io, e))?; if let Some(s) = s.strip_suffix("\n") { s } else { &s } .parse() .map_err(|e| clap::Error::raw(clap::error::ErrorKind::ValueValidation, e)) }