Skip to main content

open_geocode/builder/
progress.rs

1use std::time::Duration;
2
3use indicatif::{ProgressBar, ProgressStyle};
4
5pub(crate) fn byte_progress_bar(len: u64, message: &'static str) -> ProgressBar {
6    let progress = ProgressBar::new(len);
7    progress.set_style(
8        ProgressStyle::with_template(
9            "{msg:32} [{bar:40.cyan/blue}] {percent:>3}% {bytes}/{total_bytes} {bytes_per_sec} elapsed {elapsed_precise}",
10        )
11        .expect("valid byte progress template")
12        .progress_chars("=> "),
13    );
14    progress.set_message(message);
15    progress
16}
17
18pub(crate) fn item_progress_bar(len: u64, message: &'static str) -> ProgressBar {
19    let progress = ProgressBar::new(len);
20    progress.set_style(
21        ProgressStyle::with_template(
22            "{msg:32} [{bar:40.cyan/blue}] {percent:>3}% {pos}/{len} {per_sec} elapsed {elapsed_precise}",
23        )
24        .expect("valid item progress template")
25        .progress_chars("=> "),
26    );
27    progress.set_message(message);
28    progress
29}
30
31pub(crate) fn stage_progress(message: &'static str) -> ProgressBar {
32    let progress = ProgressBar::new_spinner();
33    progress.set_style(
34        ProgressStyle::with_template("{msg:32} {spinner} elapsed {elapsed_precise}")
35            .expect("valid stage progress template"),
36    );
37    progress.set_message(message);
38    progress.enable_steady_tick(Duration::from_millis(120));
39    progress
40}