#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum PackageType {
H,
F,
B,
}
impl TryFrom<String> for PackageType {
type Error = &'static str;
fn try_from(s: String) -> Result<Self, Self::Error> {
Self::try_from(s.as_str())
}
}
impl TryFrom<&str> for PackageType {
type Error = &'static str;
fn try_from(s: &str) -> Result<Self, Self::Error> {
if s.len() != 1 {
return Err("Invalid package trio type");
}
let c = s.chars().next().unwrap();
Self::try_from(c)
}
}
impl TryFrom<char> for PackageType {
type Error = &'static str;
fn try_from(c: char) -> Result<Self, Self::Error> {
match c {
'H' | 'h' => Ok(Self::H),
'F' | 'f' => Ok(Self::F),
'B' | 'b' => Ok(Self::B),
_ => Err("Invalid package trio type"),
}
}
}
impl From<PackageType> for char {
fn from(package_type: PackageType) -> Self {
match package_type {
PackageType::H => 'H',
PackageType::F => 'F',
PackageType::B => 'B',
}
}
}