pollio 0.1.1

A small native event poller abstraction over epoll and kqueue
Documentation
use std::os::fd::RawFd;

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum EventKind {
    Server,
    Client,
}

#[derive(Debug, Clone, Copy)]
pub struct EventObject {
    pub fd: RawFd,
    pub kind: EventKind,
}

impl EventObject {
    pub fn server(fd: RawFd) -> Self {
        Self {
            fd,
            kind: EventKind::Server,
        }
    }

    pub fn client(fd: RawFd) -> Self {
        Self {
            fd,
            kind: EventKind::Client,
        }
    }

    pub fn encode(self) -> usize {
        let tag = match self.kind {
            EventKind::Server => 1usize,
            EventKind::Client => 2usize,
        };
        ((self.fd as usize) << 8) | tag
    }

    pub fn decode(data: usize) -> Self {
        let tag = data & 0xff;
        let fd = (data >> 8) as RawFd;

        let kind = match tag {
            1 => EventKind::Server,
            2 => EventKind::Client,
            _ => panic!("unknown event kind"),
        };

        Self { fd, kind }
    }
}