A lot of the main function work is just repetition for you from the last few chapters. The real deal happens below it. In encode_bytes, you can see how to use encoders. You can write to it as much as you want and call finish when you're done.
flate2 gives you several compression options. You can choose your compression strength through the passed Compression instance:
let mut encoder = ZlibEncoder::new(Vec::new(), Compression::Default);
Default is a compromise between speed and size. Your other options are Best, Fast, and None. Additionally, you can specify the encoding algorithm used. flate2 supports zlib, which we use in this recipe, gzip, and plain deflate. If you want to use an algorithm other than zlib, simply replace every mention of it with another supported algorithm. For instance, if you wanted to rewrite the preceding code to use gzip instead, it would look like this:
use flate2::write::GzEncoder;
let mut encoder = GzEncoder::new(Vec::new(), Compression:...