async-io-mini 0.4.0

Async I/O fork for embedded systems
Documentation
pub use sys::*;

use libc as sys;

#[macro_export]
macro_rules! syscall {
    ($ret:expr) => {{
        let result = $ret;

        if result != 0 {
            Err(::std::io::Error::from_raw_os_error(result))
        } else {
            Ok(result)
        }
    }};
}

#[macro_export]
macro_rules! syscall_los {
    ($ret:expr) => {{
        let result = $ret;

        if result == -1 {
            Err(::std::io::Error::last_os_error())
        } else {
            Ok(result)
        }
    }};
}

#[macro_export]
macro_rules! syscall_los_eagain {
    ($ret:expr) => {{
        #[allow(unreachable_patterns)]
        match syscall_los!($ret) {
            Ok(_) => Ok(()),
            Err(e)
                if matches!(
                    e.raw_os_error(),
                    Some(sys::EINPROGRESS) | Some(sys::EAGAIN) | Some(sys::EWOULDBLOCK)
                ) =>
            {
                Ok(())
            }
            Err(e) => Err(e),
        }?;

        Ok::<_, io::Error>(())
    }};
}

#[macro_export]
macro_rules! ready {
    ($e:expr $(,)?) => {
        match $e {
            core::task::Poll::Ready(t) => t,
            core::task::Poll::Pending => return core::task::Poll::Pending,
        }
    };
}