measured_future_rs/report_sinks/aggregating/
impl_report_sink.rs

1use super::*;
2
3use crate::report_sink::BoxedReportSink;
4use crate::report_sink::ReportSink;
5
6impl<E, R, S> ReportSink<E> for AggregatingSink<R, S>
7where
8    E: Send + Sync + 'static,
9    R: Send + Sync + 'static,
10    R: Default,
11    R: AggregatedReport<E>,
12    S: ReportSink<R>,
13    S: Clone,
14{
15    fn send_report(&mut self, report: E) {
16        self.current.add(report);
17        if self.flush_requested && self.current.is_complete() {
18            self.flush();
19            self.flush_requested = false;
20        }
21    }
22
23    fn flush(&mut self) {
24        if self.current.is_complete() {
25            let report = std::mem::replace(&mut self.current, Default::default());
26            self.pass_to.send_report(report);
27            self.pass_to.flush();
28        } else {
29            self.flush_requested = true;
30        }
31    }
32
33    fn clone_sink(&mut self) -> BoxedReportSink<E> {
34        BoxedReportSink::new(self.clone())
35    }
36}