@@ -2373,6 +2373,28 @@ impl<'a> FromIterator<Cow<'a, str>> for String {
23732373 }
23742374}
23752375
2376+ #[ cfg( not( no_global_oom_handling) ) ]
2377+ #[ unstable( feature = "ascii_char" , issue = "110998" ) ]
2378+ impl FromIterator < core:: ascii:: Char > for String {
2379+ fn from_iter < T : IntoIterator < Item = core:: ascii:: Char > > ( iter : T ) -> Self {
2380+ let buf = iter. into_iter ( ) . map ( core:: ascii:: Char :: to_u8) . collect ( ) ;
2381+ // SAFETY: `buf` is guaranteed to be valid UTF-8 because the `core::ascii::Char` type
2382+ // only contains ASCII values (0x00-0x7F), which are valid UTF-8.
2383+ unsafe { String :: from_utf8_unchecked ( buf) }
2384+ }
2385+ }
2386+
2387+ #[ cfg( not( no_global_oom_handling) ) ]
2388+ #[ unstable( feature = "ascii_char" , issue = "110998" ) ]
2389+ impl < ' a > FromIterator < & ' a core:: ascii:: Char > for String {
2390+ fn from_iter < T : IntoIterator < Item = & ' a core:: ascii:: Char > > ( iter : T ) -> Self {
2391+ let buf = iter. into_iter ( ) . copied ( ) . map ( core:: ascii:: Char :: to_u8) . collect ( ) ;
2392+ // SAFETY: `buf` is guaranteed to be valid UTF-8 because the `core::ascii::Char` type
2393+ // only contains ASCII values (0x00-0x7F), which are valid UTF-8.
2394+ unsafe { String :: from_utf8_unchecked ( buf) }
2395+ }
2396+ }
2397+
23762398#[ cfg( not( no_global_oom_handling) ) ]
23772399#[ stable( feature = "rust1" , since = "1.0.0" ) ]
23782400impl Extend < char > for String {
@@ -3200,6 +3222,14 @@ impl<'a> FromIterator<String> for Cow<'a, str> {
32003222 }
32013223}
32023224
3225+ #[ cfg( not( no_global_oom_handling) ) ]
3226+ #[ unstable( feature = "ascii_char" , issue = "110998" ) ]
3227+ impl < ' a > FromIterator < core:: ascii:: Char > for Cow < ' a , str > {
3228+ fn from_iter < T : IntoIterator < Item = core:: ascii:: Char > > ( it : T ) -> Self {
3229+ Cow :: Owned ( FromIterator :: from_iter ( it) )
3230+ }
3231+ }
3232+
32033233#[ stable( feature = "from_string_for_vec_u8" , since = "1.14.0" ) ]
32043234impl From < String > for Vec < u8 > {
32053235 /// Converts the given [`String`] to a vector [`Vec`] that holds values of type [`u8`].
0 commit comments