#![cfg_attr(not(feature = "std"), no_std)]
use embedded_io::{ErrorType, Read, ReadReady, Write, WriteReady};
pub trait SerialIo: ErrorType {
fn try_read(&mut self, bytes: &mut [u8]) -> Result<usize, Self::Error>;
fn try_write(&mut self, bytes: &[u8]) -> Result<usize, Self::Error>;
}
#[derive(Debug)]
pub struct ReadySerial<S>(pub S);
impl<S: ErrorType> ErrorType for ReadySerial<S> {
type Error = S::Error;
}
impl<S: Read + ReadReady + Write + WriteReady> SerialIo for ReadySerial<S> {
fn try_read(&mut self, bytes: &mut [u8]) -> Result<usize, Self::Error> {
if bytes.is_empty() || !self.0.read_ready()? {
return Ok(0);
}
self.0.read(bytes)
}
fn try_write(&mut self, bytes: &[u8]) -> Result<usize, Self::Error> {
if bytes.is_empty() || !self.0.write_ready()? {
return Ok(0);
}
self.0.write(bytes)
}
}