tftio-cli-common 3.0.3

Common functionality for tftio Rust CLI tools
Documentation
//! Shared progress indicator helpers.

use std::time::Duration;

use indicatif::{ProgressBar, ProgressDrawTarget, ProgressStyle};

use crate::output::stderr_is_tty;

/// Build a stderr spinner when interactive progress is enabled.
#[must_use]
pub fn make_spinner(enabled: bool, message: &str) -> Option<ProgressBar> {
    if !enabled || !stderr_is_tty() {
        return None;
    }

    let progress_bar = ProgressBar::with_draw_target(None, ProgressDrawTarget::stderr());
    progress_bar.set_style(
        ProgressStyle::default_spinner()
            .template("{spinner:.green} {msg}")
            .expect("the spinner template is a compile-time constant"),
    );
    progress_bar.set_message(message.to_owned());
    progress_bar.enable_steady_tick(Duration::from_millis(120));

    Some(progress_bar)
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn make_spinner_returns_none_when_disabled() {
        assert!(make_spinner(false, "x").is_none());
    }
}