tftio_cli_common/
progress.rs1use std::time::Duration;
4
5use indicatif::{ProgressBar, ProgressDrawTarget, ProgressStyle};
6
7use crate::output::stderr_is_tty;
8
9#[must_use]
11pub fn make_spinner(enabled: bool, message: &str) -> Option<ProgressBar> {
12 if !enabled || !stderr_is_tty() {
13 return None;
14 }
15
16 let progress_bar = ProgressBar::with_draw_target(None, ProgressDrawTarget::stderr());
17 progress_bar.set_style(
18 ProgressStyle::default_spinner()
19 .template("{spinner:.green} {msg}")
20 .expect("valid spinner template"),
21 );
22 progress_bar.set_message(message.to_owned());
23 progress_bar.enable_steady_tick(Duration::from_millis(120));
24
25 Some(progress_bar)
26}
27
28#[cfg(test)]
29mod tests {
30 use super::*;
31
32 #[test]
33 fn make_spinner_returns_none_when_disabled() {
34 assert!(make_spinner(false, "x").is_none());
35 }
36}