| 
															
																@@ -4,54 +4,24 @@ pub const VERSION: &'static str = "0.0"; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 pub const AUTHOR: &'static str = 
															 | 
															
															 | 
															
																 pub const AUTHOR: &'static str = 
															 | 
														
													
												
													
														
															| 
															 | 
															
																     "Getty Ritter <rrecutils@infinitenegativeutility.com>"; 
															 | 
															
															 | 
															
																     "Getty Ritter <rrecutils@infinitenegativeutility.com>"; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																-pub enum Input { 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-    Stdin(io::BufReader<io::Stdin>), 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-    File(io::BufReader<fs::File>), 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-} 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																- 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-impl io::Read for Input { 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-    fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> { 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-        match self { 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-            &mut Input::Stdin(ref mut stdin) => 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                stdin.read(buf), 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-            &mut Input::File(ref mut file) => 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                file.read(buf), 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-        } 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-    } 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-} 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																- 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-impl io::BufRead for Input { 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-    fn fill_buf(&mut self) -> io::Result<&[u8]> { 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-        match self { 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-            &mut Input::Stdin(ref mut stdin) => 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                stdin.fill_buf(), 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-            &mut Input::File(ref mut file) => 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                file.fill_buf(), 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-        } 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-    } 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																- 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-    fn consume(&mut self, amt: usize) { 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-        match self { 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-            &mut Input::Stdin(ref mut stdin) => 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                stdin.consume(amt), 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-            &mut Input::File(ref mut file) => 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                file.consume(amt), 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-        } 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-    } 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-} 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																- 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+/// If this doesn't name a path, or if the path is `"-"`, then return 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+/// a buffered reader from stdin; otherwise, attempt to open the file 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+/// named by the path and return a buffered reader around it 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 pub fn input_from_spec<'a>( 
															 | 
															
															 | 
															
																 pub fn input_from_spec<'a>( 
															 | 
														
													
												
													
														
															| 
															 | 
															
																     spec: Option<&'a str> 
															 | 
															
															 | 
															
																     spec: Option<&'a str> 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-) -> io::Result<Input> { 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+) -> io::Result<io::BufReader<Box<io::Read>>> { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																     match spec.unwrap_or("-") { 
															 | 
															
															 | 
															
																     match spec.unwrap_or("-") { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-        "-" => Ok(Input::Stdin(io::BufReader::new(io::stdin()))), 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        "-" => Ok(io::BufReader::new(Box::new(io::stdin()))), 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         path => { 
															 | 
															
															 | 
															
																         path => { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             let f = fs::File::open(path)?; 
															 | 
															
															 | 
															
																             let f = fs::File::open(path)?; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-            Ok(Input::File(io::BufReader::new(f))) 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            Ok(io::BufReader::new(Box::new(f))) 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         } 
															 | 
															
															 | 
															
																         } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																     } 
															 | 
															
															 | 
															
																     } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 } 
															 | 
															
															 | 
															
																 } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+/// If this doesn't name a path, or if the path is `"-"`, then return 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+/// a buffered writer to stdout; otherwise, attempt to open the file 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+/// named by the path and return a writer around it 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 pub fn output_from_spec<'a>( 
															 | 
															
															 | 
															
																 pub fn output_from_spec<'a>( 
															 | 
														
													
												
													
														
															| 
															 | 
															
																     spec: Option<&'a str> 
															 | 
															
															 | 
															
																     spec: Option<&'a str> 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 ) -> io::Result<Box<io::Write>> 
															 | 
															
															 | 
															
																 ) -> io::Result<Box<io::Write>> 
															 |