use crate::{Device, ReadWriteDevice};
use std::io::{Error, Stderr, Stdin, Stdout, stderr, stdin, stdout};
use winter_maybe_async::{maybe_async, maybe_await};
#[derive(Debug)]
pub struct StdioDevice {
device: ReadWriteDevice<Stdin, Stdout, Stderr>,
}
impl StdioDevice {
pub fn new() -> Self {
Self {
device: ReadWriteDevice::new(stdin(), stdout(), stderr()),
}
}
}
impl Device for StdioDevice {
type Error = Error;
#[maybe_async]
fn read(&mut self) -> Result<Option<u8>, Self::Error> {
maybe_await!(self.device.read())
}
#[maybe_async]
fn write(&mut self, byte: u8) -> Result<(), Self::Error> {
maybe_await!(self.device.write(byte))
}
#[maybe_async]
fn write_error(&mut self, byte: u8) -> Result<(), Self::Error> {
maybe_await!(self.device.write_error(byte))
}
}
impl Default for StdioDevice {
fn default() -> Self {
Self::new()
}
}