1 //! Decompresses the input from stdin and writes the result to stdout. 2 3 extern crate lzw; 4 5 use std::io::{self, Write, BufWriter, BufRead}; 6 main()7fn main() { 8 match (|| -> io::Result<()> { 9 let mut decoder = 10 lzw::Decoder::new(lzw::LsbReader::new(), 8) 11 ; 12 let stdout = io::stdout(); 13 let mut stdout = BufWriter::new(stdout.lock()); 14 let stdin = io::stdin(); 15 let mut stdin = stdin.lock(); 16 loop { 17 let len = { 18 let buf = try!(stdin.fill_buf()); 19 if buf.len() == 0 { 20 break 21 } 22 let (len, bytes) = try!(decoder.decode_bytes(buf)); 23 try!(stdout.write_all(bytes)); 24 len 25 }; 26 stdin.consume(len); 27 } 28 Ok(()) 29 })() { 30 Ok(()) => (), 31 Err(err) => { let _ = write!(io::stderr(), "{}", err); } 32 } 33 34 }