#[derive(Clone, Copy, Debug, Hash, Eq, Ord, PartialEq, PartialOrd)]
pub enum Version {
V1,
Unknown(u8),
}
impl Version {
pub fn to_u8(self) -> u8 {
match self {
Version::V1 => 1,
Version::Unknown(version) => version,
}
}
pub fn from_u8(value: u8) -> Version {
match value {
1 => Version::V1,
other => Version::Unknown(other),
}
}
pub fn is_unknown(self) -> bool {
match self {
Version::Unknown(_) => true,
_ => false,
}
}
}
#[cfg(test)]
mod tests {
use super::Version;
#[test]
fn to_u8_test() {
let v1 = Version::V1;
assert_eq!(1u8, v1.to_u8());
assert!(!v1.is_unknown());
let unknown = Version::Unknown(0u8);
assert_eq!(0u8, unknown.to_u8());
assert!(unknown.is_unknown());
}
#[test]
fn from_u8_test() {
let v1 = 1u8;
assert_eq!(Version::V1, Version::from_u8(v1));
let unknown = 0u8;
assert_eq!(Version::Unknown(0u8), Version::from_u8(unknown));
}
}