ricecoder_cli/
progress.rs1use indicatif::{ProgressBar, ProgressStyle};
4use std::time::Duration;
5
6pub fn create_spinner(message: &str) -> ProgressBar {
8 let spinner = ProgressBar::new_spinner();
9 spinner.set_style(
10 ProgressStyle::default_spinner()
11 .tick_strings(&["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"])
12 .template("{spinner:.cyan} {msg}")
13 .unwrap(),
14 );
15 spinner.set_message(message.to_string());
16 spinner.enable_steady_tick(Duration::from_millis(80));
17 spinner
18}
19
20pub fn create_progress_bar(total: u64, message: &str) -> ProgressBar {
22 let pb = ProgressBar::new(total);
23 pb.set_style(
24 ProgressStyle::default_bar()
25 .template("{msg} [{bar:40.cyan/blue}] {pos}/{len}")
26 .unwrap()
27 .progress_chars("=>-"),
28 );
29 pb.set_message(message.to_string());
30 pb
31}
32
33#[cfg(test)]
34mod tests {
35 use super::*;
36
37 #[test]
38 fn test_spinner_creation() {
39 let spinner = create_spinner("Testing...");
40 assert!(!spinner.is_finished());
41 spinner.finish_with_message("Done!");
42 }
43
44 #[test]
45 fn test_progress_bar_creation() {
46 let pb = create_progress_bar(100, "Processing...");
47 assert_eq!(pb.length(), Some(100));
48 pb.finish_with_message("Complete!");
49 }
50}