1pub trait ProgressReporter: Send + Sync {
6 fn start_task(&self, message: &str) -> Box<dyn TaskHandle>;
7}
8
9pub trait TaskHandle: Send + Sync {
11 fn set_message(&self, message: &str);
12 fn finish_ok(&self, message: &str);
13 fn finish_err(&self, message: &str);
14}
15
16pub struct SilentProgress;
18
19impl ProgressReporter for SilentProgress {
20 fn start_task(&self, _message: &str) -> Box<dyn TaskHandle> {
21 Box::new(SilentTaskHandle)
22 }
23}
24
25struct SilentTaskHandle;
26
27impl TaskHandle for SilentTaskHandle {
28 fn set_message(&self, _message: &str) {}
29 fn finish_ok(&self, _message: &str) {}
30 fn finish_err(&self, _message: &str) {}
31}
32
33#[cfg(test)]
34mod tests {
35 use super::*;
36
37 #[test]
38 fn silent_progress_no_ops() {
39 let progress = SilentProgress;
40 let task = progress.start_task("test");
41 task.set_message("updated");
42 task.finish_ok("done");
43 }
44
45 #[test]
46 fn silent_progress_err() {
47 let progress = SilentProgress;
48 let task = progress.start_task("test");
49 task.finish_err("failed");
50 }
51}