aws_smithy_observability/
provider.rs1use std::sync::Arc;
9
10use crate::{meter::ProvideMeter, noop::NoopMeterProvider};
11
12#[non_exhaustive]
14pub struct TelemetryProvider {
15    meter_provider: Arc<dyn ProvideMeter + Send + Sync>,
16}
17
18impl TelemetryProvider {
19    pub fn builder() -> TelemetryProviderBuilder {
21        TelemetryProviderBuilder {
22            meter_provider: Arc::new(NoopMeterProvider),
23        }
24    }
25
26    pub fn noop() -> TelemetryProvider {
28        Self {
29            meter_provider: Arc::new(NoopMeterProvider),
30        }
31    }
32
33    pub fn meter_provider(&self) -> &(dyn ProvideMeter + Send + Sync) {
35        self.meter_provider.as_ref()
36    }
37}
38
39impl Default for TelemetryProvider {
44    fn default() -> Self {
45        Self {
46            meter_provider: Arc::new(NoopMeterProvider),
47        }
48    }
49}
50
51#[non_exhaustive]
53pub struct TelemetryProviderBuilder {
54    meter_provider: Arc<dyn ProvideMeter + Send + Sync>,
55}
56
57impl TelemetryProviderBuilder {
58    pub fn meter_provider(mut self, meter_provider: Arc<impl ProvideMeter + 'static>) -> Self {
60        self.meter_provider = meter_provider;
61        self
62    }
63
64    pub fn build(self) -> TelemetryProvider {
66        TelemetryProvider {
67            meter_provider: self.meter_provider,
68        }
69    }
70}
71
72#[non_exhaustive]
75pub(crate) struct GlobalTelemetryProvider {
76    pub(crate) telemetry_provider: Arc<TelemetryProvider>,
77}
78
79impl GlobalTelemetryProvider {
80    pub(crate) fn new(telemetry_provider: TelemetryProvider) -> Self {
81        Self {
82            telemetry_provider: Arc::new(telemetry_provider),
83        }
84    }
85
86    pub(crate) fn telemetry_provider(&self) -> &Arc<TelemetryProvider> {
87        &self.telemetry_provider
88    }
89}