1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
//! HTTP utilities for OpenTelemetry context propagation through headers.
// Originally retired from davidB/tracing-opentelemetry-instrumentation-sdk
// which is licensed under CC0 1.0 Universal
// https://github.com/davidB/tracing-opentelemetry-instrumentation-sdk/blob/d3609ac2cc699d3a24fbf89754053cc8e938e3bf/LICENSE
use Context;
use ;
use tracing_opentelemetry_instrumentation_sdk as otel;
/// HTTP header injector for OpenTelemetry context propagation.
///
/// This struct implements the [`Injector`] trait to inject OpenTelemetry trace context
/// into HTTP headers. It wraps an HTTP header map and provides the necessary interface
/// for propagators to inject trace context information.
///
/// # Usage
///
/// Typically used internally by propagation functions, but can be used directly:
///
/// ```rust
/// use http::HeaderMap;
/// use telemetry_rust::http::HeaderInjector;
///
/// let mut headers = HeaderMap::new();
/// let mut injector = HeaderInjector(&mut headers);
/// // Use with OpenTelemetry propagators...
/// ```
;
/// HTTP header extractor for OpenTelemetry context propagation.
///
/// This struct implements the [`Extractor`] trait to extract OpenTelemetry trace context
/// from HTTP headers. It wraps an HTTP header map and provides the necessary interface
/// for propagators to extract trace context information from incoming requests.
///
/// # Usage
///
/// Typically used internally by propagation functions, but can be used directly:
///
/// ```rust
/// use http::HeaderMap;
/// use telemetry_rust::http::HeaderExtractor;
///
/// let headers = HeaderMap::new();
/// let extractor = HeaderExtractor(&headers);
/// // Use with OpenTelemetry propagators...
/// ```
;
/// Injects OpenTelemetry context from a specific context into HTTP headers.
///
/// This function takes an existing OpenTelemetry context and injects its trace
/// information into the provided HTTP headers using the globally configured
/// text map propagator.
///
/// # Arguments
///
/// - `context`: The OpenTelemetry context to inject
/// - `headers`: Mutable reference to HTTP headers where context will be injected
///
/// # Examples
///
/// ```rust
/// use http::HeaderMap;
/// use opentelemetry::Context;
/// use telemetry_rust::http::inject_context_on_context;
///
/// let context = Context::current();
/// let mut headers = HeaderMap::new();
/// inject_context_on_context(&context, &mut headers);
/// ```
/// Injects the current OpenTelemetry context into HTTP headers.
///
/// This convenience function automatically finds the current OpenTelemetry context
/// and injects its trace information into the provided HTTP headers using the
/// globally configured text map propagator.
///
/// # Arguments
///
/// - `headers`: Mutable reference to HTTP headers where context will be injected
///
/// # Examples
///
/// ```rust
/// use http::HeaderMap;
/// use telemetry_rust::http::inject_context;
///
/// let mut headers = HeaderMap::new();
/// inject_context(&mut headers);
/// ```
/// Extracts OpenTelemetry context from HTTP headers.
///
/// This function extracts trace context information from HTTP headers using the
/// globally configured text map propagator. If no trace context is found in the
/// headers, it returns an unsampled context.
///
/// # Arguments
///
/// - `headers`: Reference to HTTP headers to extract context from
///
/// # Returns
///
/// An OpenTelemetry [`Context`] containing the extracted trace information, or
/// an unsampled context if no trace data was found.
///
/// # Examples
///
/// ```rust
/// use http::HeaderMap;
/// use telemetry_rust::http::extract_context;
///
/// let headers = HeaderMap::new();
/// let context = extract_context(&headers);
/// ```
// If remote request has no span data the propagator defaults to an unsampled context