1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
pub use super::IdentifierError; #[repr(u8)] #[derive(PartialEq,Debug,Clone)] pub enum OpCode { Query = 0, IQuery = 1, Status = 2, Notify = 4, Update = 5, } impl OpCode { pub fn from_u8(value: u8) -> Result<OpCode, IdentifierError> { match value { 0 => Ok(OpCode::Query), 1 => Ok(OpCode::IQuery), 2 => Ok(OpCode::Status), 4 => Ok(OpCode::Notify), 5 => Ok(OpCode::Update), 3 => Err(IdentifierError::UnassignedIdentifierError(3 as i64)), x @ 6...15 => Err(IdentifierError::UnassignedIdentifierError(x as i64)), x @ _ => Err(IdentifierError::UnknownIdentifierError(x as i64)), } } } #[cfg(test)] mod test_opcode { use super::OpCode; use super::IdentifierError; #[test] fn test_variant_identity() { assert_eq!(OpCode::Query, OpCode::from_u8(0).ok().unwrap()); assert_eq!(OpCode::IQuery, OpCode::from_u8(1).ok().unwrap()); assert_eq!(OpCode::Status, OpCode::from_u8(2).ok().unwrap()); assert_eq!(OpCode::Notify, OpCode::from_u8(4).ok().unwrap()); assert_eq!(OpCode::Update, OpCode::from_u8(5).ok().unwrap()); } #[test] fn test_range_unassigned_identity() { assert_eq!(IdentifierError::UnassignedIdentifierError(3), OpCode::from_u8(3).err().unwrap()); for i in 6..(15u64+1) { assert_eq!(IdentifierError::UnassignedIdentifierError(i as i64), OpCode::from_u8(i as u8).err().unwrap()); } } }