| 
					
				 | 
			
			
				@@ -4,54 +4,24 @@ pub const VERSION: &'static str = "0.0"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 pub const AUTHOR: &'static str = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     "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>( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     spec: Option<&'a str> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-) -> io::Result<Input> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+) -> io::Result<io::BufReader<Box<io::Read>>> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     match spec.unwrap_or("-") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        "-" => Ok(Input::Stdin(io::BufReader::new(io::stdin()))), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        "-" => Ok(io::BufReader::new(Box::new(io::stdin()))), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         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>( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     spec: Option<&'a str> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ) -> io::Result<Box<io::Write>> 
			 |