File tree 3 files changed +43
-0
lines changed 3 files changed +43
-0
lines changed Original file line number Diff line number Diff line change @@ -1202,6 +1202,20 @@ impl char {
1202
1202
}
1203
1203
}
1204
1204
1205
+ /// Converts this char into an [ASCII character](`ascii::Char`), without
1206
+ /// checking whether it is valid.
1207
+ ///
1208
+ /// # Safety
1209
+ ///
1210
+ /// This char must be within the ASCII range, or else this is UB.
1211
+ #[ must_use]
1212
+ #[ unstable( feature = "ascii_char" , issue = "110998" ) ]
1213
+ #[ inline]
1214
+ pub const unsafe fn as_ascii_unchecked ( & self ) -> ascii:: Char {
1215
+ // SAFETY: the caller promised that this char is ASCII.
1216
+ unsafe { ascii:: Char :: from_u8_unchecked ( * self as u8 ) }
1217
+ }
1218
+
1205
1219
/// Makes a copy of the value in its ASCII upper case equivalent.
1206
1220
///
1207
1221
/// ASCII letters 'a' to 'z' are mapped to 'A' to 'Z',
Original file line number Diff line number Diff line change @@ -492,6 +492,20 @@ impl u8 {
492
492
ascii:: Char :: from_u8 ( * self )
493
493
}
494
494
495
+ /// Converts this byte to an [ASCII character](ascii::Char), without
496
+ /// checking whether or not it's valid.
497
+ ///
498
+ /// # Safety
499
+ ///
500
+ /// This byte must be valid ASCII, or else this is UB.
501
+ #[ must_use]
502
+ #[ unstable( feature = "ascii_char" , issue = "110998" ) ]
503
+ #[ inline]
504
+ pub const unsafe fn as_ascii_unchecked ( & self ) -> ascii:: Char {
505
+ // SAFETY: the caller promised that this byte is ASCII.
506
+ unsafe { ascii:: Char :: from_u8_unchecked ( * self ) }
507
+ }
508
+
495
509
/// Makes a copy of the value in its ASCII upper case equivalent.
496
510
///
497
511
/// ASCII letters 'a' to 'z' are mapped to 'A' to 'Z',
Original file line number Diff line number Diff line change @@ -2634,6 +2634,21 @@ impl str {
2634
2634
self . as_bytes ( ) . as_ascii ( )
2635
2635
}
2636
2636
2637
+ /// Converts this string slice into a slice of [ASCII characters](ascii::Char),
2638
+ /// without checking whether they are valid.
2639
+ ///
2640
+ /// # Safety
2641
+ ///
2642
+ /// Every character in this string must be ASCII, or else this is UB.
2643
+ #[ unstable( feature = "ascii_char" , issue = "110998" ) ]
2644
+ #[ must_use]
2645
+ #[ inline]
2646
+ pub const unsafe fn as_ascii_unchecked ( & self ) -> & [ ascii:: Char ] {
2647
+ // SAFETY: the caller promised that every byte of this string slice
2648
+ // is ASCII.
2649
+ unsafe { self . as_bytes ( ) . as_ascii_unchecked ( ) }
2650
+ }
2651
+
2637
2652
/// Checks that two strings are an ASCII case-insensitive match.
2638
2653
///
2639
2654
/// Same as `to_ascii_lowercase(a) == to_ascii_lowercase(b)`,
You can’t perform that action at this time.
0 commit comments