Skip to content

Commit af885fd

Browse files
authored
feat: support OpenTelemetry 0.29 (#228)
* feat: support OpenTelemetry 0.29 * changelog
1 parent 101fa63 commit af885fd

File tree

5 files changed

+39
-0
lines changed

5 files changed

+39
-0
lines changed

reqwest-tracing/CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
### Added
11+
- Added support for OpenTelemetry `0.29` ([#228](https://github.com/TrueLayer/reqwest-middleware/pull/228))
12+
1013
## [0.5.6] - 2025-02-24
1114

1215
### Added

reqwest-tracing/Cargo.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ opentelemetry_0_25 = ["opentelemetry_0_25_pkg", "tracing-opentelemetry_0_26_pkg"
1919
opentelemetry_0_26 = ["opentelemetry_0_26_pkg", "tracing-opentelemetry_0_27_pkg"]
2020
opentelemetry_0_27 = ["opentelemetry_0_27_pkg", "tracing-opentelemetry_0_28_pkg"]
2121
opentelemetry_0_28 = ["opentelemetry_0_28_pkg", "tracing-opentelemetry_0_29_pkg"]
22+
opentelemetry_0_29 = ["opentelemetry_0_29_pkg", "tracing-opentelemetry_0_30_pkg"]
2223
# This feature ensures that both the old (deprecated) and new attributes are published simultaneously.
2324
# By doing so, we maintain backward compatibility, allowing existing code that relies on the old attributes
2425
# to continue functioning while encouraging the transition to the new attributes.
@@ -43,6 +44,7 @@ opentelemetry_0_25_pkg = { package = "opentelemetry", version = "0.25.0", option
4344
opentelemetry_0_26_pkg = { package = "opentelemetry", version = "0.26.0", optional = true }
4445
opentelemetry_0_27_pkg = { package = "opentelemetry", version = "0.27.0", optional = true }
4546
opentelemetry_0_28_pkg = { package = "opentelemetry", version = "0.28.0", optional = true }
47+
opentelemetry_0_29_pkg = { package = "opentelemetry", version = "0.29.0", optional = true }
4648
tracing-opentelemetry_0_21_pkg = { package = "tracing-opentelemetry", version = "0.21.0", optional = true }
4749
tracing-opentelemetry_0_22_pkg = { package = "tracing-opentelemetry", version = "0.22.0", optional = true }
4850
tracing-opentelemetry_0_23_pkg = { package = "tracing-opentelemetry", version = "0.23.0", optional = true }
@@ -52,6 +54,7 @@ tracing-opentelemetry_0_26_pkg = { package = "tracing-opentelemetry", version =
5254
tracing-opentelemetry_0_27_pkg = { package = "tracing-opentelemetry", version = "0.27.0", optional = true }
5355
tracing-opentelemetry_0_28_pkg = { package = "tracing-opentelemetry", version = "0.28.0", optional = true }
5456
tracing-opentelemetry_0_29_pkg = { package = "tracing-opentelemetry", version = "0.29.0", optional = true }
57+
tracing-opentelemetry_0_30_pkg = { package = "tracing-opentelemetry", version = "0.30.0", optional = true }
5558

5659
[target.'cfg(target_arch = "wasm32")'.dependencies]
5760
getrandom = { version = "0.2.0", features = ["js"] }
@@ -70,6 +73,7 @@ opentelemetry_sdk_0_25 = { package = "opentelemetry_sdk", version = "0.25.0", fe
7073
opentelemetry_sdk_0_26 = { package = "opentelemetry_sdk", version = "0.26.0", features = ["trace"] }
7174
opentelemetry_sdk_0_27 = { package = "opentelemetry_sdk", version = "0.27.0", features = ["trace"] }
7275
opentelemetry_sdk_0_28 = { package = "opentelemetry_sdk", version = "0.28.0", features = ["trace"] }
76+
opentelemetry_sdk_0_29 = { package = "opentelemetry_sdk", version = "0.29.0", features = ["trace"] }
7377
opentelemetry_stdout_0_1 = { package = "opentelemetry-stdout", version = "0.1.0", features = ["trace"] }
7478
opentelemetry_stdout_0_2 = { package = "opentelemetry-stdout", version = "0.2.0", features = ["trace"] }
7579
opentelemetry_stdout_0_3 = { package = "opentelemetry-stdout", version = "0.3.0", features = ["trace"] }

reqwest-tracing/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ mod middleware;
9393
feature = "opentelemetry_0_26",
9494
feature = "opentelemetry_0_27",
9595
feature = "opentelemetry_0_28",
96+
feature = "opentelemetry_0_29",
9697
))]
9798
mod otel;
9899
mod reqwest_otel_span_builder;

reqwest-tracing/src/middleware.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ where
5555
feature = "opentelemetry_0_26",
5656
feature = "opentelemetry_0_27",
5757
feature = "opentelemetry_0_28",
58+
feature = "opentelemetry_0_29",
5859
))]
5960
let req = if extensions.get::<crate::DisableOtelPropagation>().is_none() {
6061
// Adds tracing headers to the given request to propagate the OpenTelemetry context to downstream revivers of the request.

reqwest-tracing/src/otel.rs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,13 @@ pub fn inject_opentelemetry_context_into_request(mut request: Request) -> Reques
6868
injector.inject_context(&context, &mut RequestCarrier::new(&mut request))
6969
});
7070

71+
#[cfg(feature = "opentelemetry_0_29")]
72+
opentelemetry_0_29_pkg::global::get_text_map_propagator(|injector| {
73+
use tracing_opentelemetry_0_30_pkg::OpenTelemetrySpanExt;
74+
let context = Span::current().context();
75+
injector.inject_context(&context, &mut RequestCarrier::new(&mut request))
76+
});
77+
7178
request
7279
}
7380

@@ -158,6 +165,13 @@ impl opentelemetry_0_28_pkg::propagation::Injector for RequestCarrier<'_> {
158165
}
159166
}
160167

168+
#[cfg(feature = "opentelemetry_0_29")]
169+
impl opentelemetry_0_29_pkg::propagation::Injector for RequestCarrier<'_> {
170+
fn set(&mut self, key: &str, value: String) {
171+
self.set_inner(key, value)
172+
}
173+
}
174+
161175
#[cfg(test)]
162176
mod test {
163177
use std::sync::OnceLock;
@@ -357,6 +371,22 @@ mod test {
357371
subscriber.with(telemetry)
358372
};
359373

374+
#[cfg(feature = "opentelemetry_0_29")]
375+
let subscriber = {
376+
use opentelemetry_0_29_pkg::trace::TracerProvider;
377+
378+
let provider = opentelemetry_sdk_0_29::trace::SdkTracerProvider::builder().build();
379+
380+
let tracer = provider.tracer("reqwest");
381+
let _ = opentelemetry_0_29_pkg::global::set_tracer_provider(provider);
382+
opentelemetry_0_29_pkg::global::set_text_map_propagator(
383+
opentelemetry_sdk_0_29::propagation::TraceContextPropagator::new(),
384+
);
385+
386+
let telemetry = tracing_opentelemetry_0_30_pkg::layer().with_tracer(tracer);
387+
subscriber.with(telemetry)
388+
};
389+
360390
tracing::subscriber::set_global_default(subscriber).unwrap();
361391
});
362392

0 commit comments

Comments
 (0)