measured_future_rs/
reporting_future_ext.rs1use 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 {}