@@ -145,12 +145,12 @@ pub use exporter::{
145145pub use propagator:: { DatadogPropagator , DatadogTraceState , DatadogTraceStateBuilder } ;
146146
147147mod propagator {
148- use once_cell:: sync:: Lazy ;
149148 use opentelemetry:: {
150149 propagation:: { text_map_propagator:: FieldIter , Extractor , Injector , TextMapPropagator } ,
151150 trace:: { SpanContext , SpanId , TraceContextExt , TraceFlags , TraceId , TraceState } ,
152151 Context ,
153152 } ;
153+ use std:: sync:: OnceLock ;
154154
155155 const DATADOG_TRACE_ID_HEADER : & str = "x-datadog-trace-id" ;
156156 const DATADOG_PARENT_ID_HEADER : & str = "x-datadog-parent-id" ;
@@ -163,13 +163,18 @@ mod propagator {
163163 const TRACE_STATE_TRUE_VALUE : & str = "1" ;
164164 const TRACE_STATE_FALSE_VALUE : & str = "0" ;
165165
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+ }
173178
174179 #[ derive( Default ) ]
175180 pub struct DatadogTraceStateBuilder {
@@ -449,7 +454,7 @@ mod propagator {
449454 }
450455
451456 fn fields ( & self ) -> FieldIter < ' _ > {
452- FieldIter :: new ( DATADOG_HEADER_FIELDS . as_ref ( ) )
457+ FieldIter :: new ( trace_context_header_fields ( ) )
453458 }
454459 }
455460
0 commit comments