use crate::error::LibResult;
use crate::Error;
use std::convert::TryFrom;
#[repr(u8)]
#[derive(Clone, Copy, Debug, Eq, Ord, PartialEq, PartialOrd, Hash, Default)]
pub enum DurationName {
Whole = 0,
Half = 1,
#[default]
Quarter = 2,
Eighth = 3,
Sixteenth = 4,
D32 = 5,
D64 = 6,
D128 = 7,
D256 = 8,
D512 = 9,
D1024 = 10,
}
impl DurationName {
pub(crate) fn from_u8(v: u8) -> LibResult<Self> {
match v {
v if DurationName::Whole as u8 == v => Ok(DurationName::Whole),
v if DurationName::Half as u8 == v => Ok(DurationName::Half),
v if DurationName::Quarter as u8 == v => Ok(DurationName::Quarter),
v if DurationName::Eighth as u8 == v => Ok(DurationName::Eighth),
v if DurationName::Sixteenth as u8 == v => Ok(DurationName::Sixteenth),
v if DurationName::D32 as u8 == v => Ok(DurationName::D32),
v if DurationName::D64 as u8 == v => Ok(DurationName::D64),
v if DurationName::D128 as u8 == v => Ok(DurationName::D128),
v if DurationName::D256 as u8 == v => Ok(DurationName::D256),
v if DurationName::D512 as u8 == v => Ok(DurationName::D512),
v if DurationName::D1024 as u8 == v => Ok(DurationName::D1024),
_ => crate::error::OtherSnafu { site: site!() }.fail(),
}
}
}
impl TryFrom<u8> for DurationName {
type Error = Error;
fn try_from(value: u8) -> crate::Result<Self> {
Ok(Self::from_u8(value)?)
}
}