heveanly 0.1.0

C is the heavenly option
Documentation
use core::mem::MaybeUninit;

use super::syscall::{self, syscall, Check, ResultSize};
use crate::{Errno, Fd, Iovec, IovecMut};

impl Fd {
   #[inline(always)]
   pub fn close(self) -> Result<(), Errno> {
      unsafe { syscall!(syscall::SYS_close, self.get()) }.check()
   }

   #[inline(always)]
   pub fn write(self, buf: &[u8]) -> Result<usize, Errno> {
      unsafe { syscall!(syscall::SYS_write, self.get(), buf.as_ptr(), buf.len()) }.try_usize()
   }

   #[inline(always)]
   pub fn writev(self, bufs: &[Iovec]) -> Result<usize, Errno> {
      unsafe { syscall!(syscall::SYS_writev, self.get(), bufs.as_ptr(), bufs.len()) }.try_usize()
   }

   #[inline(always)]
   pub fn read(self, buf: &mut [MaybeUninit<u8>]) -> Result<usize, Errno> {
      unsafe { syscall!(syscall::SYS_read, self.get(), buf.as_mut_ptr(), buf.len()) }.try_usize()
   }

   pub fn readv(self, bufs: &mut [IovecMut]) -> Result<usize, Errno> {
      unsafe { syscall!(syscall::SYS_readv, self.get(), bufs.as_ptr(), bufs.len()) }.try_usize()
   }
}