use crate::Packet;
pub(crate) struct Pdu<P> {
packet: P,
len: usize,
}
impl<P> Pdu<P> {
pub(crate) fn new(packet: P, len: usize) -> Self {
Self { packet, len }
}
pub(crate) fn len(&self) -> usize {
self.len
}
pub(crate) fn into_inner(self) -> P {
self.packet
}
}
impl<P: Packet> AsRef<[u8]> for Pdu<P> {
fn as_ref(&self) -> &[u8] {
&self.packet.as_ref()[..self.len]
}
}
impl<P: Packet> AsMut<[u8]> for Pdu<P> {
fn as_mut(&mut self) -> &mut [u8] {
&mut self.packet.as_mut()[..self.len]
}
}
pub struct Sdu<P> {
pdu: Pdu<P>,
}
impl<P> Sdu<P> {
pub fn new(packet: P, len: usize) -> Self {
Self {
pdu: Pdu::new(packet, len),
}
}
pub(crate) fn from_pdu(pdu: Pdu<P>) -> Self {
Self { pdu }
}
pub fn len(&self) -> usize {
self.pdu.len()
}
pub fn is_empty(&self) -> bool {
self.pdu.len() == 0
}
pub fn into_inner(self) -> P {
self.pdu.into_inner()
}
}
impl<P: Packet> AsRef<[u8]> for Sdu<P> {
fn as_ref(&self) -> &[u8] {
self.pdu.as_ref()
}
}
impl<P: Packet> AsMut<[u8]> for Sdu<P> {
fn as_mut(&mut self) -> &mut [u8] {
self.pdu.as_mut()
}
}