med_core/utils/
progress_bar.rs

1use indicatif::{ProgressBar, ProgressStyle};
2use std::time::Duration;
3
4#[cfg(not(windows))]
5const TICK_SETTINGS: (&str, u64) = ("⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏ ", 80);
6
7#[cfg(windows)]
8const TICK_SETTINGS: (&str, u64) = (r"+-x| ", 200);
9
10/// Return a pre-configured progress bar
11pub fn get_progress_bar(length: u64, msg: &str) -> ProgressBar {
12    let progressbar_style = ProgressStyle::default_spinner()
13        .tick_chars(TICK_SETTINGS.0)
14        .progress_chars("=> ")
15        .template(" {spinner} {msg} {percent}% [{bar:30}] {pos}/{len} ETA {elapsed}")
16        .expect("no template error");
17
18    let progress_bar = ProgressBar::new(length);
19    progress_bar.set_style(progressbar_style);
20    progress_bar.enable_steady_tick(Duration::from_millis(TICK_SETTINGS.1));
21    progress_bar.set_message(msg.to_owned());
22
23    progress_bar
24}