diff --git a/CHANGELOG.md b/CHANGELOG.md index 0e691db95..c2621cf3d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## Unreleased + +### New Features + +- Added a `Envelope::into_items` method, which returns an iterator over owned [`EnvelopeItem`s](https://docs.rs/sentry/0.46.2/sentry/protocol/enum.EnvelopeItem.html) in the [`Envelope`](https://docs.rs/sentry/0.46.2/sentry/struct.Envelope.html) ([#983](https://github.com/getsentry/sentry-rust/pull/983)). + ## 0.46.2 ### New Features diff --git a/sentry-opentelemetry/tests/creates_distributed_trace.rs b/sentry-opentelemetry/tests/creates_distributed_trace.rs index 369e9ceb3..f0dbf3a0f 100644 --- a/sentry-opentelemetry/tests/creates_distributed_trace.rs +++ b/sentry-opentelemetry/tests/creates_distributed_trace.rs @@ -60,9 +60,9 @@ fn test_creates_distributed_trace() { let mut first_tx = None; let mut second_tx = None; - for envelope in &envelopes { - let tx = match envelope.items().next().unwrap() { - sentry::protocol::EnvelopeItem::Transaction(tx) => tx.clone(), + for envelope in envelopes { + let tx = match envelope.into_items().next().unwrap() { + sentry::protocol::EnvelopeItem::Transaction(tx) => tx, unexpected => panic!("Expected transaction, but got {unexpected:#?}"), }; diff --git a/sentry-types/src/protocol/envelope.rs b/sentry-types/src/protocol/envelope.rs index 3a9bed50d..040ca91ba 100644 --- a/sentry-types/src/protocol/envelope.rs +++ b/sentry-types/src/protocol/envelope.rs @@ -377,6 +377,17 @@ impl Envelope { EnvelopeItemIter { inner } } + /// Consume the Envelope and create an [`Iterator`] over all + /// owned [`EnvelopeItem`]s. + /// + /// Raw envelopes yield an empty iterator. + pub fn into_items(self) -> impl Iterator { + match self.items { + Items::EnvelopeItems(items) => items.into_iter(), + Items::Raw(_) => Default::default(), + } + } + /// Returns the Envelope headers. pub fn headers(&self) -> &EnvelopeHeaders { &self.headers