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