use crate::{igmp::*, *};
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct LeaveGroupSlice<'a> {
slice: &'a [u8],
}
impl<'a> LeaveGroupSlice<'a> {
#[inline]
pub(crate) unsafe fn from_slice_unchecked(slice: &'a [u8]) -> LeaveGroupSlice<'a> {
debug_assert!(slice.len() >= LeaveGroupType::LEN);
LeaveGroupSlice { slice }
}
#[inline]
pub fn checksum(&self) -> u16 {
unsafe { get_unchecked_be_u16(self.slice.as_ptr().add(2)) }
}
#[inline]
pub fn group_address(&self) -> GroupAddress {
GroupAddress::new(unsafe {
[
*self.slice.get_unchecked(4),
*self.slice.get_unchecked(5),
*self.slice.get_unchecked(6),
*self.slice.get_unchecked(7),
]
})
}
#[inline]
pub fn to_header(&self) -> LeaveGroupType {
LeaveGroupType {
group_address: self.group_address(),
}
}
#[inline]
pub fn payload(&self) -> &'a [u8] {
unsafe {
core::slice::from_raw_parts(
self.slice.as_ptr().add(LeaveGroupType::LEN),
self.slice.len() - LeaveGroupType::LEN,
)
}
}
#[inline]
pub fn slice(&self) -> &'a [u8] {
self.slice
}
}