1use indicatif::{ProgressBar, ProgressStyle};
2
3pub fn create_progress_bar(quiet_mode: bool, msg: String, length: Option<u64>, is_parallel: bool) -> ProgressBar {
16 let bar = if quiet_mode {
17 ProgressBar::hidden()
18 } else {
19 match length {
20 Some(len) => ProgressBar::new(len),
21 None => ProgressBar::new_spinner(),
22 }
23 };
24
25 bar.set_message(msg);
26
27 if let Some(_) = length {
28 let template = if is_parallel {
29 "{msg}\n{spinner:.green} [{elapsed_precise}] [{wide_bar:.cyan/blue}] {bytes}/{total_bytes} ({percent}%) eta: {eta} speed: {binary_bytes_per_sec}\nChunks: {chunks} active"
30 } else {
31 "{msg}\n{spinner:.green} [{elapsed_precise}] [{wide_bar:.cyan/blue}] {bytes}/{total_bytes} ({percent}%) eta: {eta} speed: {binary_bytes_per_sec}"
32 };
33
34 bar.set_style(
35 ProgressStyle::default_bar()
36 .template(template)
37 .unwrap()
38 .progress_chars("=>-")
39 );
40 } else {
41 bar.set_style(
42 ProgressStyle::default_spinner()
43 .template("{spinner:.green} {msg} {elapsed}")
44 .unwrap()
45 );
46 }
47
48 bar
49}