1 extern crate flate2; 2 3 use flate2::write::GzEncoder; 4 use flate2::Compression; 5 use std::env::args; 6 use std::fs::File; 7 use std::io::copy; 8 use std::io::BufReader; 9 use std::time::Instant; 10 main()11fn main() { 12 if args().len() != 3 { 13 eprintln!("Usage: ./compress_file `source` `target`"); 14 return; 15 } 16 let mut input = BufReader::new(File::open(args().nth(1).unwrap()).unwrap()); 17 let output = File::create(args().nth(2).unwrap()).unwrap(); 18 let mut encoder = GzEncoder::new(output, Compression::default()); 19 let start = Instant::now(); 20 copy(&mut input, &mut encoder).unwrap(); 21 let output = encoder.finish().unwrap(); 22 println!( 23 "Source len: {:?}", 24 input.get_ref().metadata().unwrap().len() 25 ); 26 println!("Target len: {:?}", output.metadata().unwrap().len()); 27 println!("Elapsed: {:?}", start.elapsed()); 28 } 29