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}