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 is_otel: bool,
17}
18
19impl TelemetryProvider {
20 pub fn builder() -> TelemetryProviderBuilder {
22 TelemetryProviderBuilder {
23 meter_provider: Arc::new(NoopMeterProvider),
24 is_otel: false,
25 }
26 }
27
28 pub fn noop() -> TelemetryProvider {
30 Self {
31 meter_provider: Arc::new(NoopMeterProvider),
32 is_otel: false,
33 }
34 }
35
36 pub fn meter_provider(&self) -> &(dyn ProvideMeter + Send + Sync) {
38 self.meter_provider.as_ref()
39 }
40
41 pub fn is_otel(&self) -> bool {
43 self.is_otel
44 }
45
46 pub fn is_noop(&self) -> bool {
48 self.meter_provider
50 .as_any()
51 .downcast_ref::<NoopMeterProvider>()
52 .is_some()
53 }
54}
55
56impl Default for TelemetryProvider {
61 fn default() -> Self {
62 Self {
63 meter_provider: Arc::new(NoopMeterProvider),
64 is_otel: false,
65 }
66 }
67}
68
69#[non_exhaustive]
71pub struct TelemetryProviderBuilder {
72 meter_provider: Arc<dyn ProvideMeter + Send + Sync>,
73 is_otel: bool,
74}
75
76impl TelemetryProviderBuilder {
77 pub fn meter_provider(mut self, meter_provider: Arc<impl ProvideMeter + 'static>) -> Self {
79 self.meter_provider = meter_provider;
80 self
81 }
82
83 pub fn with_otel(mut self, is_otel: bool) -> Self {
85 self.is_otel = is_otel;
86 self
87 }
88
89 pub fn build(self) -> TelemetryProvider {
91 TelemetryProvider {
92 meter_provider: self.meter_provider,
93 is_otel: self.is_otel,
94 }
95 }
96}
97
98#[non_exhaustive]
101pub(crate) struct GlobalTelemetryProvider {
102 pub(crate) telemetry_provider: Arc<TelemetryProvider>,
103}
104
105impl GlobalTelemetryProvider {
106 pub(crate) fn new(telemetry_provider: TelemetryProvider) -> Self {
107 Self {
108 telemetry_provider: Arc::new(telemetry_provider),
109 }
110 }
111
112 pub(crate) fn telemetry_provider(&self) -> &Arc<TelemetryProvider> {
113 &self.telemetry_provider
114 }
115}