1use 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}