parallel_disk_usage/reporter/
error_only_reporter.rs

1use super::{ErrorReport, Event, ParallelReporter, Reporter};
2use crate::size;
3use std::convert::Infallible;
4
5/// Only report errors.
6#[derive(Debug)]
7pub struct ErrorOnlyReporter<ReportError: Fn(ErrorReport)> {
8    /// Report encountered errors.
9    report_error: ReportError,
10}
11
12impl<ReportError: Fn(ErrorReport)> ErrorOnlyReporter<ReportError> {
13    /// Create a new [`ErrorOnlyReporter`].
14    pub fn new(report_error: ReportError) -> Self {
15        ErrorOnlyReporter { report_error }
16    }
17}
18
19impl<Size, ReportError> Reporter<Size> for ErrorOnlyReporter<ReportError>
20where
21    Size: size::Size,
22    ReportError: Fn(ErrorReport),
23{
24    fn report(&self, event: Event<Size>) {
25        let ErrorOnlyReporter { report_error } = self;
26        if let Event::EncounterError(error_report) = event {
27            report_error(error_report);
28        }
29    }
30}
31
32impl<Size, ReportError> ParallelReporter<Size> for ErrorOnlyReporter<ReportError>
33where
34    Size: size::Size,
35    ReportError: Fn(ErrorReport),
36{
37    type DestructionError = Infallible; // TODO: change this to `!` once it is stable.
38    fn destroy(self) -> Result<(), Self::DestructionError> {
39        Ok(())
40    }
41}