@@ -2373,6 +2373,28 @@ impl<'a> FromIterator<Cow<'a, str>> for String {
2373
2373
}
2374
2374
}
2375
2375
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
+
2376
2398
#[ cfg( not( no_global_oom_handling) ) ]
2377
2399
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
2378
2400
impl Extend < char > for String {
@@ -3200,6 +3222,14 @@ impl<'a> FromIterator<String> for Cow<'a, str> {
3200
3222
}
3201
3223
}
3202
3224
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
+
3203
3233
#[ stable( feature = "from_string_for_vec_u8" , since = "1.14.0" ) ]
3204
3234
impl From < String > for Vec < u8 > {
3205
3235
/// Converts the given [`String`] to a vector [`Vec`] that holds values of type [`u8`].
0 commit comments