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()7 fn 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 }