extern crate brotli;
#[cfg(not(feature="std"))]
fn main() {
    panic!("For no-stdlib examples please see the tests")
}
#[cfg(feature="std")]
fn main() {
    use std::io;
    use std::io::{Read, Write};
    let stdout = &mut io::stdout();
    {
        let mut writer = brotli::CompressorWriter::new(
            stdout,
            4096,
            11,
            22);
        let mut buf = [0u8; 4096];
        loop {
            match io::stdin().read(&mut buf[..]) {
                Err(e) => {
                    if let io::ErrorKind::Interrupted = e.kind() {
                        continue;
                    }
                    panic!("{}", e);
                }
                Ok(size) => {
                    if size == 0 {
                        match writer.flush() {
                            Err(e) => {
                                if let io::ErrorKind::Interrupted = e.kind() {
                                    continue;
                                }
                                panic!("{}", e)
                            }
                            Ok(_) => break,
                        }
                    }
                    match writer.write_all(&buf[..size]) {
                        Err(e) => panic!("{}", e),
                        Ok(_) => {},
                    }
                }
            }
        }
    }
}
