irid-std 0.3.1

A replacement for std when running without a filesystem on the irid kernel
Documentation
use core::marker::PhantomData;

use irid_syscall::io::FileDescriptor;

use crate::io::{Read, Write, convert_error};

use super::Error;

pub struct StdOutput<const FILE: FileDescriptor> {
    pub(crate) _hidden: PhantomData<FileDescriptor>
}
pub struct StdInput<const FILE: FileDescriptor> {
    pub(crate) _hidden: PhantomData<FileDescriptor>
}

impl <const FILE: FileDescriptor> Write for StdOutput<FILE> {
    fn write(&mut self, buf: &[u8]) -> Result<usize, Error> {
        irid_syscall::io::write(FILE, buf)
            .map_err(convert_error)
    }

    fn flush(&mut self) -> Result<(), Error> {
        Ok(())
    }
}

impl <const FILE: FileDescriptor> Write for &StdOutput<FILE> {
    fn write(&mut self, buf: &[u8]) -> Result<usize, Error> {
        irid_syscall::io::write(FILE, buf)
            .map_err(convert_error)
    }

    fn flush(&mut self) -> Result<(), Error> {
        Ok(())
    }
}

impl <const FILE: FileDescriptor> Read for StdInput<FILE> {
    fn read(&mut self, buf: &mut [u8]) -> Result<usize, Error> {
        irid_syscall::io::read(FILE, buf)
            .map_err(convert_error)
    }
}