use {std, ll};
use bitflags::bitflags;
#[derive(Clone, Copy, Debug)]
pub enum Packet <'a> {
Allocate {
bytes : &'a [u8],
flags : Flags
},
NoAllocate {
bytes : &'static [u8],
flags : Flags
}
}
#[derive(Debug)]
pub struct PacketRecv {
raw : *mut ll::ENetPacket
}
bitflags! {
#[derive(Clone, Copy, Debug)]
pub struct Flags : u32 {
#[allow(clippy::unnecessary_cast)] const RELIABLE = ll::_ENetPacketFlag_ENET_PACKET_FLAG_RELIABLE as u32;
#[allow(clippy::unnecessary_cast)] const UNSEQUENCED = ll::_ENetPacketFlag_ENET_PACKET_FLAG_UNSEQUENCED as u32;
#[allow(clippy::unnecessary_cast)] const UNRELIABLE_FRAGMENT = ll::_ENetPacketFlag_ENET_PACKET_FLAG_UNRELIABLE_FRAGMENT
as u32;
#[allow(clippy::unnecessary_cast)] const NO_ALLOCATE = ll::_ENetPacketFlag_ENET_PACKET_FLAG_NO_ALLOCATE as u32;
}
}
impl PacketRecv {
#[inline]
pub const unsafe fn from_raw (raw : *mut ll::ENetPacket) -> Self {
PacketRecv { raw }
}
#[inline]
pub fn flags (&self) -> Flags {
unsafe { Flags::from_bits ((*self.raw).flags).unwrap() }
}
#[inline]
pub fn data_length (&self) -> usize {
unsafe { (*self.raw).dataLength }
}
#[inline]
pub fn data (&self) -> &[u8] {
unsafe {
let len = (*self.raw).dataLength;
std::slice::from_raw_parts ((*self.raw).data, len)
}
}
}
impl Drop for PacketRecv {
#[inline]
fn drop (&mut self) {
unsafe { ll::enet_packet_destroy (self.raw) }
}
}