From e33650c16fec1ed8dcdbfc0aa3eac33ceece34d3 Mon Sep 17 00:00:00 2001 From: Simon Sapin Date: Wed, 19 Aug 2015 17:31:46 +0200 Subject: [PATCH] Add .as_str() to str::Chars and str::CharIndices. See #27775. --- src/libcore/str/mod.rs | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/libcore/str/mod.rs b/src/libcore/str/mod.rs index 48118c18029fe..7aeda24a29028 100644 --- a/src/libcore/str/mod.rs +++ b/src/libcore/str/mod.rs @@ -292,6 +292,18 @@ impl<'a> DoubleEndedIterator for Chars<'a> { } } +impl<'a> Chars<'a> { + /// View the underlying data as a subslice of the original data. + /// + /// This has the same lifetime as the original slice, and so the + /// iterator can continue to be used while this exists. + #[unstable(feature = "iter_to_slice", issue = "27775")] + #[inline] + pub fn as_str(&self) -> &'a str { + unsafe { from_utf8_unchecked(self.iter.as_slice()) } + } +} + /// Iterator for a string's characters and their byte offsets. #[derive(Clone)] #[stable(feature = "rust1", since = "1.0.0")] @@ -339,6 +351,18 @@ impl<'a> DoubleEndedIterator for CharIndices<'a> { } } +impl<'a> CharIndices<'a> { + /// View the underlying data as a subslice of the original data. + /// + /// This has the same lifetime as the original slice, and so the + /// iterator can continue to be used while this exists. + #[unstable(feature = "iter_to_slice", issue = "27775")] + #[inline] + pub fn as_str(&self) -> &'a str { + self.iter.as_str() + } +} + /// External iterator for a string's bytes. /// Use with the `std::iter` module. ///