measured_future_rs/report_sinks/aggregating/
impl_report_sink.rs1use 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}