ui_cli/shared/
task_spinner.rs1use 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}