use crate::io; use crate::sys::{ReadSysCall, WriteSysCall}; pub struct Stdin; pub struct Stdout; pub struct Stderr; impl Stdin { pub fn new() -> io::Result { Ok(Stdin) } } impl io::Read for Stdin { fn read(&mut self, buf: &mut [u8]) -> io::Result { Ok(ReadSysCall::perform(0, buf)) } } impl Stdout { pub fn new() -> io::Result { Ok(Stdout) } } impl io::Write for Stdout { fn write(&mut self, buf: &[u8]) -> io::Result { WriteSysCall::perform(1, buf); Ok(buf.len()) } fn flush(&mut self) -> io::Result<()> { Ok(()) } } impl Stderr { pub fn new() -> io::Result { Ok(Stderr) } } impl io::Write for Stderr { fn write(&mut self, buf: &[u8]) -> io::Result { WriteSysCall::perform(2, buf); Ok(buf.len()) } fn flush(&mut self) -> io::Result<()> { Ok(()) } } pub const STDIN_BUF_SIZE: usize = 0; pub fn is_ebadf(_err: &io::Error) -> bool { true } pub fn panic_output() -> Option { if cfg!(feature = "wasm_syscall") { Stderr::new().ok() } else { None } }