use embedded_hal_nb::serial::{ErrorType, Read, Write};
pub struct Serial;
impl ErrorType for Serial {
type Error = core::convert::Infallible;
}
impl Read<u8> for Serial {
fn read(&mut self) -> nb::Result<u8, Self::Error> {
rivet::console::try_read_byte().ok_or(nb::Error::WouldBlock)
}
}
impl Write<u8> for Serial {
fn write(&mut self, word: u8) -> nb::Result<(), Self::Error> {
rivet::console::write_bytes(&[word]);
Ok(())
}
fn flush(&mut self) -> nb::Result<(), Self::Error> {
Ok(())
}
}
#[cfg(test)]
mod tests {
use super::*;
#[allow(dead_code)]
fn generic_read<R: Read<u8>>(r: &mut R) -> nb::Result<u8, R::Error> {
r.read()
}
#[allow(dead_code)]
fn generic_write<W: Write<u8>>(w: &mut W, b: u8) -> nb::Result<(), W::Error> {
w.write(b)
}
#[test]
fn type_checks() {
let _ = generic_read::<Serial>;
let _ = generic_write::<Serial>;
}
}