bookdata/io/compress.rs
1use std::io::prelude::*;
2use std::io::BufReader;
3use std::path::Path;
4
5use anyhow::Result;
6use flate2::bufread::MultiGzDecoder;
7use indicatif::ProgressBar;
8
9use super::open_progress;
10use crate::io::background::ThreadRead;
11
12/// Open a gzip-compressed file for input, with a progress bar.
13///
14/// It sets the progress bar's prefix to the file name.
15pub fn open_gzin_progress(path: &Path, pb: ProgressBar) -> Result<impl BufRead> {
16 let read = open_progress(path, pb)?;
17 let gzf = MultiGzDecoder::new(read);
18
19 let thr = ThreadRead::new(gzf)?;
20 let bfs = BufReader::new(thr);
21 Ok(Box::new(bfs))
22}