1use teksilo_core::BuildContext;
13use teksilo_core::widget::EventContext;
14
15use crate::bundle::OpenedTelemetry;
16use crate::consent::ConsentStore;
17use crate::dynamic_reporter::DynamicReporter;
18
19pub trait TelemetryExt {
22 fn telemetry(&self) -> &OpenedTelemetry {
25 self.try_telemetry().unwrap_or_else(|| {
26 panic!(
27 "TelemetryExt::telemetry(): no OpenedTelemetry registered. \
28 Call TeksiloAppBuilder::telemetry(TelemetryBundle::new(...)) at startup."
29 )
30 })
31 }
32
33 fn consent(&self) -> &ConsentStore {
35 &self.telemetry().consent
36 }
37
38 fn usage_reporter(&self) -> &DynamicReporter {
42 &self.telemetry().reporter
43 }
44
45 fn try_telemetry(&self) -> Option<&OpenedTelemetry>;
46}
47
48impl<'a> TelemetryExt for BuildContext<'a> {
49 fn try_telemetry(&self) -> Option<&OpenedTelemetry> {
50 self.app_state::<OpenedTelemetry>()
51 }
52}
53
54impl<'a> TelemetryExt for EventContext<'a> {
55 fn try_telemetry(&self) -> Option<&OpenedTelemetry> {
56 self.app_state::<OpenedTelemetry>()
57 }
58}