Skip to content

Commit

Permalink
Auto merge of rust-lang#110729 - ColinFinck:decode-utf16-fused-iterat…
Browse files Browse the repository at this point in the history
…or, r=dtolnay

Implement FusedIterator for DecodeUtf16 when the inner iterator does

I have just implemented an iterator that wraps `DecodeUtf16` and wanted to implement `FusedIterator` for my iterator when I noticed that `DecodeUtf16` currently doesn't implement `FusedIterator` at all.
A quick look at the code of `DecodeUtf16` revealed that `DecodeUtf16::next` only returns `None` when its inner iterator returns `None`:
https://github.com/rust-lang/rust/blob/3462f79e94f466a56ddaccfcdd3a3d44dd1dda9f/library/core/src/char/decode.rs#L45

As a result, we can implement `FusedIterator` for `DecodeUtf16` when the inner iterator does.

I'm following the example of rust-lang#96397 here and consider this change minor and non-controversial, which is why I haven't added an RFC. I have also added the required feature name (`"decode_utf16_fused_iterator"`), however without adding a chapter to the Rust Unstable book (same as rust-lang#96397).
  • Loading branch information
bors committed Oct 15, 2023
2 parents d60d63f + 60fd119 commit 64368d0
Showing 1 changed file with 4 additions and 0 deletions.
4 changes: 4 additions & 0 deletions library/core/src/char/decode.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

use crate::error::Error;
use crate::fmt;
use crate::iter::FusedIterator;

/// An iterator that decodes UTF-16 encoded code points from an iterator of `u16`s.
///
Expand Down Expand Up @@ -105,6 +106,9 @@ impl<I: Iterator<Item = u16>> Iterator for DecodeUtf16<I> {
}
}

#[stable(feature = "decode_utf16_fused_iterator", since = "CURRENT_RUSTC_VERSION")]
impl<I: Iterator<Item = u16> + FusedIterator> FusedIterator for DecodeUtf16<I> {}

impl DecodeUtf16Error {
/// Returns the unpaired surrogate which caused this error.
#[must_use]
Expand Down

0 comments on commit 64368d0

Please sign in to comment.