genio 0.2.1

A type safe, low level replacement for `std::io`. Supports `no_std` for embedded development, just disable cargo feature `std`. Because of limitations of `std::io::Error` type, `genio` provides `Read` and `Write` traits that allow implementors to choose their own type. This type can be better at expressing what kinds of error can happen.
Documentation
use Read;

/// Represents reader as iterator over bytes.
///
/// Note: this iterator is unbuffered, so it's advised to use `BufReader` to improve performance.
pub struct Bytes<R> {
    reader: R,
}

impl<R: Read> Bytes<R> {
    /// Creates the iterator.
    pub fn new(reader: R) -> Self {
        Bytes {
            reader: reader,
        }
    }
}

impl<R: Read> Iterator for Bytes<R> {
    type Item = Result<u8, R::ReadError>;

    fn next(&mut self) -> Option<Self::Item> {
        let mut buf = [0];
        match self.reader.read(&mut buf) {
            Ok(0) => None,
            Ok(_) => Some(Ok(buf[0])),
            Err(e) => Some(Err(e)),
        }
    } 
}