rtipc 0.9.0

Real-Time IPC, based on a zero-copy, wait-free circular message queue implementation
Documentation
use std::os::fd::BorrowedFd;
use std::time::Duration;

use nix::errno::Errno;
use nix::poll::{PollFd, PollFlags, PollTimeout, poll};

pub use crate::common::rpc::CommandArgs;
pub use crate::common::rpc::DivArgs;
pub use crate::common::rpc::MsgCommand;
pub use crate::common::rpc::MsgEvent;
pub use crate::common::rpc::MsgResponse;
pub use crate::common::rpc::SendEventArgs;

pub mod rpc;

#[repr(u32)]
#[derive(Copy, Clone, Debug)]
pub enum CommandId {
    Hello = 1,
    Stop = 2,
    SendEvent = 3,
    Div = 4,
}

pub fn wait_pollin(fd: BorrowedFd, timeout: Duration) -> Result<bool, Errno> {
    let mut fds = [PollFd::new(fd, PollFlags::POLLIN)];
    let duration: PollTimeout = timeout.try_into().unwrap();
    poll(&mut fds, duration)?;
    Ok(fds[0].revents().map_or(false, |flags| !flags.is_empty()))
}