Skip to main content

putzen_cli/
observer.rs

1pub trait RunObserver {
2    /// Called after a folder is successfully cleaned.
3    /// Returns an optional hint string (e.g. "🏆 new highscore!") to display inline.
4    fn on_folder_cleaned(&mut self, size: u64) -> Option<String>;
5
6    /// Called after the entire run completes.
7    /// Returns an optional string with medal ASCII art to display.
8    fn on_run_complete(&mut self, total: u64) -> Option<String>;
9}
10
11pub struct NoOpObserver;
12
13impl RunObserver for NoOpObserver {
14    fn on_folder_cleaned(&mut self, _size: u64) -> Option<String> {
15        None
16    }
17
18    fn on_run_complete(&mut self, _total: u64) -> Option<String> {
19        None
20    }
21}
22
23#[cfg(test)]
24mod tests {
25    use super::*;
26
27    #[test]
28    fn noop_observer_returns_none() {
29        let mut observer = NoOpObserver;
30        assert!(observer.on_folder_cleaned(1024).is_none());
31        assert!(observer.on_run_complete(2048).is_none());
32    }
33}