measured_future_rs/
reporting_future_ext.rs

1use std::future::Future;
2
3use crate::meters::default_meter::DefaultMeterReport;
4use crate::report_sink::BoxedReportSink;
5use crate::report_sink::ReportSink;
6use crate::reporting_future::ReportingFuture;
7
8pub trait ReportingFutureExt: Sized {
9    fn report_to<S, R>(self, sink: S) -> ReportingFuture<Self, R>
10    where
11        R: Send + Sync + 'static,
12        S: ReportSink<R>,
13    {
14        let sink = BoxedReportSink::new(sink);
15        ReportingFuture::new(self, Some(sink))
16    }
17    fn report_to_current(self) -> ReportingFuture<Self, DefaultMeterReport> {
18        let sink_opt = crate::report_sink::current::with::<DefaultMeterReport, _, _>(|sink_opt| {
19            sink_opt.map(|sink| sink.clone_sink())
20        });
21        ReportingFuture::new(self, sink_opt)
22    }
23}
24impl<T> ReportingFutureExt for T where T: Future {}