ui_cli/shared/
task_spinner.rs

1use std::time::Duration;
2
3use indicatif::ProgressBar;
4
5const SPINNER_UPDATE_DURATION: u64 = 100;
6
7pub struct TaskSpinner {
8    spinner: ProgressBar,
9}
10
11impl TaskSpinner {
12    pub fn new(message: &str) -> Self {
13        let spinner = ProgressBar::new_spinner();
14        spinner.set_message(message.to_string());
15        spinner.enable_steady_tick(Duration::from_millis(SPINNER_UPDATE_DURATION));
16        Self { spinner }
17    }
18
19    pub fn set_message(&self, message: &str) {
20        self.spinner.set_message(message.to_string());
21    }
22
23    pub fn finish_success(self, message: &str) {
24        self.spinner.finish_with_message(format!("✔️ {message}"));
25    }
26
27    pub fn finish_with_message(self, message: &str) {
28        self.spinner.finish_with_message(message.to_string());
29    }
30}