use crate::*;
#[derive(Debug, Clone, PartialEq)]
pub enum Packet<'a> {
Connect(Connect<'a>),
Connack(Connack),
Publish(Publish<'a>),
Puback(Pid),
Pubrec(Pid),
Pubrel(Pid),
Pubcomp(Pid),
Subscribe(Subscribe),
Suback(Suback),
Unsubscribe(Unsubscribe),
Unsuback(Pid),
Pingreq,
Pingresp,
Disconnect,
}
impl<'a> Packet<'a> {
pub fn get_type(&self) -> PacketType {
match self {
Packet::Connect(_) => PacketType::Connect,
Packet::Connack(_) => PacketType::Connack,
Packet::Publish(_) => PacketType::Publish,
Packet::Puback(_) => PacketType::Puback,
Packet::Pubrec(_) => PacketType::Pubrec,
Packet::Pubrel(_) => PacketType::Pubrel,
Packet::Pubcomp(_) => PacketType::Pubcomp,
Packet::Subscribe(_) => PacketType::Subscribe,
Packet::Suback(_) => PacketType::Suback,
Packet::Unsubscribe(_) => PacketType::Unsubscribe,
Packet::Unsuback(_) => PacketType::Unsuback,
Packet::Pingreq => PacketType::Pingreq,
Packet::Pingresp => PacketType::Pingresp,
Packet::Disconnect => PacketType::Disconnect,
}
}
}
macro_rules! packet_from_borrowed {
($($t:ident),+) => {
$(
impl<'a> From<$t<'a>> for Packet<'a> {
fn from(p: $t<'a>) -> Self {
Packet::$t(p)
}
}
)+
}
}
macro_rules! packet_from {
($($t:ident),+) => {
$(
impl<'a> From<$t> for Packet<'a> {
fn from(p: $t) -> Self {
Packet::$t(p)
}
}
)+
}
}
packet_from_borrowed!(Connect, Publish);
packet_from!(Suback, Connack, Subscribe, Unsubscribe);
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub enum PacketType {
Connect,
Connack,
Publish,
Puback,
Pubrec,
Pubrel,
Pubcomp,
Subscribe,
Suback,
Unsubscribe,
Unsuback,
Pingreq,
Pingresp,
Disconnect,
}