use crate::{igmp::*, *};
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct MembershipQuerySlice<'a> {
slice: &'a [u8],
}
impl<'a> MembershipQuerySlice<'a> {
#[inline]
pub(crate) unsafe fn from_slice_unchecked(slice: &'a [u8]) -> MembershipQuerySlice<'a> {
debug_assert!(slice.len() >= MembershipQueryType::LEN);
MembershipQuerySlice { slice }
}
#[inline]
pub fn max_response_time(&self) -> u8 {
unsafe { *self.slice.get_unchecked(1) }
}
#[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) -> MembershipQueryType {
MembershipQueryType {
max_response_time: self.max_response_time(),
group_address: self.group_address(),
}
}
#[inline]
pub fn slice(&self) -> &'a [u8] {
self.slice
}
}