use crate::error::ErrorKind;
use std::convert::TryFrom;
#[derive(Eq, PartialEq, Hash, Copy, Clone, Debug)]
pub enum Urgency {
Low = 0,
Normal = 1,
Critical = 2,
}
impl TryFrom<&str> for Urgency {
type Error = crate::error::Error;
#[rustfmt::skip]
fn try_from(string: &str) -> Result<Urgency, Self::Error> {
match string.to_lowercase().as_ref() {
"low" |
"lo" => Ok(Urgency::Low),
"normal" |
"medium" => Ok(Urgency::Normal),
"critical" |
"high" |
"hi" => Ok(Urgency::Critical),
_ => Err(ErrorKind::Conversion(format!("invalid input {:?}", string)).into())
}
}
}
impl From<Option<u64>> for Urgency {
fn from(maybe_int: Option<u64>) -> Urgency {
match maybe_int {
Some(0) => Urgency::Low,
Some(x) if x >= 2 => Urgency::Critical,
_ => Urgency::Normal,
}
}
}
impl From<u64> for Urgency {
fn from(int: u64) -> Urgency {
match int {
0 => Urgency::Low,
1 => Urgency::Normal,
2..=std::u64::MAX => Urgency::Critical,
}
}
}