use core::{convert::From, fmt};
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
#[derive(Debug, PartialEq, Eq, PartialOrd, Copy, Clone, Hash)]
#[cfg_attr(feature = "serde", derive(Deserialize, Serialize))]
#[allow(dead_code)]
pub enum OpCode {
Query,
Status,
Notify,
Update,
Unknown(u8),
}
impl fmt::Display for OpCode {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> Result<(), fmt::Error> {
match self {
Self::Query => f.write_str("QUERY"),
Self::Status => f.write_str("STATUS"),
Self::Notify => f.write_str("NOTIFY"),
Self::Update => f.write_str("UPDATE"),
Self::Unknown(opcode) => write!(f, "Unknown opcode ({opcode})"),
}
}
}
impl From<OpCode> for u8 {
fn from(rt: OpCode) -> Self {
match rt {
OpCode::Query => 0,
OpCode::Status => 2,
OpCode::Notify => 4,
OpCode::Update => 5,
OpCode::Unknown(opcode) => opcode,
}
}
}
impl OpCode {
pub fn from_u8(value: u8) -> Self {
match value {
0 => Self::Query,
2 => Self::Status,
4 => Self::Notify,
5 => Self::Update,
_ => Self::Unknown(value),
}
}
}