logo
pub fn buffered_reader_generic_read_impl<T: BufferedReader<C>, C: Debug + Sync + Send>(
    bio: &mut T,
    buf: &mut [u8]
) -> Result<usize, Error>
Expand description

A generic implementation of std::io::Read::read appropriate for any BufferedReader implementation.

This function implements the std::io::Read::read method in terms of the data_consume method. We can’t use the io::std::Read interface, because the BufferedReader may have buffered some data internally (in which case a read will not return the buffered data, but the following data).

This implementation is generic. When deriving a BufferedReader, you can include the following:

impl<'a, T: BufferedReader> std::io::Read for XXX<'a, T> {
    fn read(&mut self, buf: &mut [u8]) -> Result<usize, std::io::Error> {
        return buffered_reader_generic_read_impl(self, buf);
    }
}

It would be nice if we could do:

impl <T: BufferedReader> std::io::Read for T { ... }

but, alas, Rust doesn’t like that (“error[E0119]: conflicting implementations of trait std::io::Read for type &mut _”).