use crate::epoll::{EpollEvent, EpollFlags};
#[derive(Copy, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
#[repr(transparent)]
pub struct Event(EpollFlags);
impl From<EpollFlags> for Event {
fn from(value: EpollFlags) -> Self {
Self::new(value)
}
}
impl From<&EpollEvent> for Event {
fn from(value: &EpollEvent) -> Self {
let ptr = value as *const _ as *const libc::epoll_event;
Self(EpollFlags::from_bits_retain(
unsafe { *ptr }.events as libc::c_int,
))
}
}
impl From<Event> for EpollFlags {
fn from(value: Event) -> Self {
value.bitflags()
}
}
impl Event {
pub const fn new(flags: EpollFlags) -> Self {
Self(flags)
}
pub const fn bitflags(&self) -> EpollFlags {
self.0
}
pub const fn is_readable(&self) -> bool {
self.0.contains(EpollFlags::EPOLLIN)
}
pub const fn is_writable(&self) -> bool {
self.0.contains(EpollFlags::EPOLLOUT)
}
pub const fn is_priority(&self) -> bool {
self.0.contains(EpollFlags::EPOLLPRI)
}
pub const fn is_error(&self) -> bool {
self.0.contains(EpollFlags::EPOLLERR)
}
pub const fn is_hangup(&self) -> bool {
self.0.contains(EpollFlags::EPOLLHUP)
}
pub const fn is_read_closed(&self) -> bool {
self.0.contains(EpollFlags::EPOLLRDHUP)
}
}