From 4914e6a56547dcbe0fdbcfd7eae62a3d416875a5 Mon Sep 17 00:00:00 2001 From: Till Hoeppner Date: Sun, 26 Jul 2015 23:56:52 +0200 Subject: Add glob-ing for input files --- src/chain.rs | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 src/chain.rs (limited to 'src/chain.rs') diff --git a/src/chain.rs b/src/chain.rs new file mode 100644 index 0000000..9b9848a --- /dev/null +++ b/src/chain.rs @@ -0,0 +1,48 @@ +use std::io::{ Result, Read, Write }; + +pub struct Chain { + elem: Vec, + index: usize +} + +impl Read for Chain { + fn read(&mut self, buf: &mut [u8]) -> Result { + loop { + match self.elem.get_mut(self.index) { + Some(ref mut r) => match try!(r.read(buf)) { + 0 => self.index += 1, + n => return Ok(n) + }, + None => return Ok(0) + } + } + } +} + +impl Write for Chain { + fn write(&mut self, buf: &[u8]) -> Result { + loop { + match self.elem.get_mut(self.index) { + Some(ref mut r) => match try!(r.write(buf)) { + 0 => self.index += 1, + n => return Ok(n) + }, + None => return Ok(0) + } + } + } + + fn flush(&mut self) -> Result<()> { + match self.elem.get_mut(self.index) { + Some(ref mut r) => r.flush(), + None => Ok(()) + } + } + +} + +impl Chain { + pub fn new(elem: Vec) -> Chain { + Chain { index: 0, elem: elem } + } +} -- cgit v1.2.3