rust_utils/str.rs
1use crate::sealed::Sealed;
2
3pub trait StrExt {
4 fn from_ascii_simd(bytes: &[u8]) -> Option<&str>;
5
6 fn from_utf8_simd(bytes: &[u8]) -> Option<&str>;
7}
8
9impl Sealed for str {}
10
11impl StrExt for str {
12 fn from_ascii_simd(bytes: &[u8]) -> Option<&str> {
13 // TODO(blocking): use `unicode_simd::from_ascii`
14 bytes.is_ascii().then(|| unsafe { core::str::from_utf8_unchecked(bytes) })
15 }
16
17 fn from_utf8_simd(bytes: &[u8]) -> Option<&str> {
18 simdutf8::basic::from_utf8(bytes).ok()
19 }
20}