use indicatif::{MultiProgress, ProgressBar, ProgressStyle};
pub struct AnalysisProgress {
multi: MultiProgress,
enabled: bool,
}
impl AnalysisProgress {
#[must_use]
pub fn new(enabled: bool) -> Self {
Self {
multi: MultiProgress::new(),
enabled,
}
}
#[must_use]
pub fn stage_spinner(&self, message: &str) -> ProgressBar {
if !self.enabled {
return ProgressBar::hidden();
}
let pb = self.multi.add(ProgressBar::new_spinner());
pb.set_style(
ProgressStyle::with_template("{spinner:.cyan} {msg}")
.expect("valid progress template")
.tick_chars("⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏ "),
);
pb.set_message(message.to_string());
pb.enable_steady_tick(std::time::Duration::from_millis(80));
pb
}
pub fn finish(&self) {
let _ = self.multi.clear();
}
}
impl Default for AnalysisProgress {
fn default() -> Self {
Self::new(false)
}
}