#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[derive(Serialize, Deserialize)]
pub struct TrafficClass
{
pub differentiated_service_code_point: DifferentiatedServiceCodePoint,
pub explicit_congestion_notification: ExplicitCongestionNotification,
}
impl Display for TrafficClass
{
#[inline(always)]
fn fmt(&self, f: &mut Formatter) -> fmt::Result
{
write!(f, "{}, {}", self.differentiated_service_code_point, self.explicit_congestion_notification)
}
}
impl Into<u8> for TrafficClass
{
#[inline(always)]
fn into(self) -> u8
{
let differentiated_service_code_point: u8 = self.differentiated_service_code_point.into();
let explicit_congestion_notification: u8 = self.explicit_congestion_notification.into();
differentiated_service_code_point << 2 | explicit_congestion_notification
}
}
impl From<u8> for TrafficClass
{
#[inline(always)]
fn from(value: u8) -> Self
{
Self
{
differentiated_service_code_point: DifferentiatedServiceCodePoint::from(value >> 2),
explicit_congestion_notification: unsafe { transmute(value & 0b11) },
}
}
}