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)
}
}