1
Fork 0

Implement Extend<AsciiChar> for String

This commit is contained in:
Matthew Zeitlin 2025-02-08 16:51:04 -05:00
parent 73bf7947e9
commit d566b5db9b
No known key found for this signature in database
GPG key ID: 5630C0C7A3CEE08E
3 changed files with 39 additions and 0 deletions

View file

@ -2442,6 +2442,32 @@ impl<'a> Extend<Cow<'a, str>> for String {
}
}
#[cfg(not(no_global_oom_handling))]
#[unstable(feature = "ascii_char", issue = "110998")]
impl Extend<core::ascii::Char> for String {
fn extend<I: IntoIterator<Item = core::ascii::Char>>(&mut self, iter: I) {
self.vec.extend(iter.into_iter().map(|c| c.to_u8()));
}
#[inline]
fn extend_one(&mut self, c: core::ascii::Char) {
self.vec.push(c.to_u8());
}
}
#[cfg(not(no_global_oom_handling))]
#[unstable(feature = "ascii_char", issue = "110998")]
impl<'a> Extend<&'a core::ascii::Char> for String {
fn extend<I: IntoIterator<Item = &'a core::ascii::Char>>(&mut self, iter: I) {
self.extend(iter.into_iter().cloned());
}
#[inline]
fn extend_one(&mut self, c: &'a core::ascii::Char) {
self.vec.push(c.to_u8());
}
}
/// A convenience impl that delegates to the impl for `&str`.
///
/// # Examples

View file

@ -26,3 +26,15 @@ fn test_debug_control() {
assert_eq!(want, format!("{chr:?}"), "byte: {byte}");
}
}
/// Tests Extend implementation for ascii::Char.
#[test]
fn test_extend() {
let mut s = String::from("abc");
s.extend_one(Char::SmallD);
assert_eq!(s, String::from("abcd"));
let mut s = String::from("abc");
s.extend(Char::CapitalA..=Char::CapitalC);
assert_eq!(s, String::from("abcABC"));
}

View file

@ -27,6 +27,7 @@
#![feature(duration_constructors)]
#![feature(error_generic_member_access)]
#![feature(exact_size_is_empty)]
#![feature(extend_one)]
#![feature(extern_types)]
#![feature(float_minimum_maximum)]
#![feature(flt2dec)]