diff --git a/Cargo.toml b/Cargo.toml index fd32808..1e8d611 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tee" -version = "0.1.0" +version = "0.2.0" authors = ["softprops "] description = "An adapter for readers which delegate reads to a writer" documentation = "http://softprops.github.io/tee" diff --git a/src/lib.rs b/src/lib.rs index 239365f..1473fb4 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -7,6 +7,15 @@ pub struct TeeReader { writer: W, } +/// Returns a TeeReader which can be used as Read whose +/// reads delegate bytes read to the provided reader and write to the provided +/// writer. The write operation must complete before the read completes. +/// +/// Errors reported by the write operation will be interpreted as errors for the read +pub fn tee(reader: R, writer: W) -> TeeReader { + TeeReader::new(reader, writer) +} + impl TeeReader { /// Returns a TeeReader which can be used as Read whose /// reads delegate bytes read to the provided reader and write to the provided @@ -28,15 +37,14 @@ impl TeeReader { impl Read for TeeReader { fn read(&mut self, buf: &mut [u8]) -> Result { - let n = try!(self.reader.read(buf)); - try!(self.writer.write_all(&buf[..n])); + let n = self.reader.read(buf)?; + self.writer.write_all(&buf[..n])?; Ok(n) } } #[cfg(test)] mod tests { - use super::*; use std::io::Read; #[test] @@ -45,7 +53,7 @@ mod tests { let mut teeout = Vec::new(); let mut stdout = Vec::new(); { - let mut tee = TeeReader::new(&mut reader, &mut teeout); + let mut tee = super::tee(&mut reader, &mut teeout); let _ = tee.read_to_end(&mut stdout); } assert_eq!(teeout, stdout);