1use console::style;
7use indicatif::{ProgressBar, ProgressStyle};
8
9pub struct ProgressReporter {
11 bar: ProgressBar,
13}
14
15impl ProgressReporter {
16 pub fn new() -> Self {
18 let bar = ProgressBar::new(0);
19 let style = ProgressStyle::default_bar()
20 .template(&format!(
21 "{} [{{bar:40.cyan/blue}}] {{pos}}/{{len}} files ({{msg}})",
22 style(" Shredding").green().bold()
23 ))
24 .unwrap_or_else(|_| ProgressStyle::default_bar());
25 bar.set_style(style.progress_chars("#>-"));
26
27 Self { bar }
28 }
29
30 pub fn start_files(&self, total: u64) {
32 self.bar.set_length(total);
33 self.bar.set_message("processing...");
34 }
35
36 pub fn inc_file_complete(&self) {
38 self.bar.inc(1);
39 }
40
41 pub fn finish(&self) {
43 self.bar.finish_and_clear();
44 }
45}
46
47impl Default for ProgressReporter {
48 fn default() -> Self {
49 Self::new()
50 }
51}