use parse_argument::parse_argument;
use std::str::FromStr;
use std::process::exit;
#[derive(Debug)]
enum Settings {
Foo,
Bar,
Baz,
Default }
#[derive(Debug)]
struct ParseSettingsErr;
impl FromStr for Settings {
type Err = ParseSettingsErr;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s {
"foo" | "Foo" => Ok(Self::Foo),
"bar" | "Bar" => Ok(Self::Bar),
"baz" | "Baz" => Ok(Self::Baz),
_ => Err(ParseSettingsErr)
}
}
}
fn main() {
let setting = parse_argument::<Settings>("setting")
.unwrap_or(Ok(Settings::Default))
.map_err(|_| {
println!("Error parsing setting");
exit(1);
})
.unwrap()
;
println!("--setting argument: {:?}", setting);
}