kget/
progress.rs

1/// A progress bar configured with a custom style
2use indicatif::{ProgressBar, ProgressStyle};
3
4pub fn create_progress_bar(quiet_mode: bool, msg: String, length: Option<u64>, is_parallel: bool) -> ProgressBar {
5    let bar = if quiet_mode {
6        ProgressBar::hidden()
7    } else {
8        match length {
9            Some(len) => ProgressBar::new(len),
10            None => ProgressBar::new_spinner(),
11        }
12    };
13
14    bar.set_message(msg);
15    
16    if let Some(_) = length {
17        let template = if is_parallel {
18            "{msg}\n{spinner:.green} [{elapsed_precise}] [{wide_bar:.cyan/blue}] {bytes}/{total_bytes} ({percent}%) eta: {eta} speed: {binary_bytes_per_sec}\nChunks: {chunks} active"
19        } else {
20            "{msg}\n{spinner:.green} [{elapsed_precise}] [{wide_bar:.cyan/blue}] {bytes}/{total_bytes} ({percent}%) eta: {eta} speed: {binary_bytes_per_sec}"
21        };
22
23        bar.set_style(
24            ProgressStyle::default_bar()
25                .template(template)
26                .unwrap()
27                .progress_chars("=>-")
28        );
29    } else {
30        bar.set_style(
31            ProgressStyle::default_spinner()
32                .template("{spinner:.green} {msg} {elapsed}")
33                .unwrap()
34        );
35    }
36
37    bar
38}