use indicatif::{ProgressBar, ProgressStyle};
pub(super) struct ReplayProgress {
bar: ProgressBar,
}
impl ReplayProgress {
pub(super) fn new(total_requests: usize, label: &'static str) -> Self {
let bar = ProgressBar::new(total_requests as u64);
bar.set_style(
ProgressStyle::with_template(
"[{elapsed_precise}] [{wide_bar:.cyan/blue}] {pos}/{len} ({eta}) {msg}",
)
.expect("progress bar template must be valid")
.progress_chars("#>-"),
);
bar.set_message(label);
Self { bar }
}
pub(super) fn inc_completed(&self) {
self.bar.inc(1);
}
pub(super) fn finish(&self) {
self.bar.finish_and_clear();
}
}
impl Drop for ReplayProgress {
fn drop(&mut self) {
if !self.bar.is_finished() {
self.bar.finish_and_clear();
}
}
}