@@ -145,12 +145,12 @@ pub use exporter::{
145
145
pub use propagator:: { DatadogPropagator , DatadogTraceState , DatadogTraceStateBuilder } ;
146
146
147
147
mod propagator {
148
- use once_cell:: sync:: Lazy ;
149
148
use opentelemetry:: {
150
149
propagation:: { text_map_propagator:: FieldIter , Extractor , Injector , TextMapPropagator } ,
151
150
trace:: { SpanContext , SpanId , TraceContextExt , TraceFlags , TraceId , TraceState } ,
152
151
Context ,
153
152
} ;
153
+ use std:: sync:: OnceLock ;
154
154
155
155
const DATADOG_TRACE_ID_HEADER : & str = "x-datadog-trace-id" ;
156
156
const DATADOG_PARENT_ID_HEADER : & str = "x-datadog-parent-id" ;
@@ -163,13 +163,18 @@ mod propagator {
163
163
const TRACE_STATE_TRUE_VALUE : & str = "1" ;
164
164
const TRACE_STATE_FALSE_VALUE : & str = "0" ;
165
165
166
- static DATADOG_HEADER_FIELDS : Lazy < [ String ; 3 ] > = Lazy :: new ( || {
167
- [
168
- DATADOG_TRACE_ID_HEADER . to_string ( ) ,
169
- DATADOG_PARENT_ID_HEADER . to_string ( ) ,
170
- DATADOG_SAMPLING_PRIORITY_HEADER . to_string ( ) ,
171
- ]
172
- } ) ;
166
+ // TODO Replace this with LazyLock when MSRV is 1.80+
167
+ static TRACE_CONTEXT_HEADER_FIELDS : OnceLock < [ String ; 3 ] > = OnceLock :: new ( ) ;
168
+
169
+ fn trace_context_header_fields ( ) -> & ' static [ String ; 3 ] {
170
+ TRACE_CONTEXT_HEADER_FIELDS . get_or_init ( || {
171
+ [
172
+ DATADOG_TRACE_ID_HEADER . to_owned ( ) ,
173
+ DATADOG_PARENT_ID_HEADER . to_owned ( ) ,
174
+ DATADOG_SAMPLING_PRIORITY_HEADER . to_owned ( ) ,
175
+ ]
176
+ } )
177
+ }
173
178
174
179
#[ derive( Default ) ]
175
180
pub struct DatadogTraceStateBuilder {
@@ -449,7 +454,7 @@ mod propagator {
449
454
}
450
455
451
456
fn fields ( & self ) -> FieldIter < ' _ > {
452
- FieldIter :: new ( DATADOG_HEADER_FIELDS . as_ref ( ) )
457
+ FieldIter :: new ( trace_context_header_fields ( ) )
453
458
}
454
459
}
455
460
0 commit comments