rust/library/alloc/src
Ali MJ Al-Nasrawy 38654ad741
Rollup merge of #95967 - CAD97:from-utf16, r=dtolnay
Add explicit-endian String::from_utf16 variants

This adds the following APIs under `feature(str_from_utf16_endian)`:

```rust
impl String {
    pub fn from_utf16le(v: &[u8]) -> Result<String, FromUtf16Error>;
    pub fn from_utf16le_lossy(v: &[u8]) -> String;
    pub fn from_utf16be(v: &[u8]) -> Result<String, FromUtf16Error>;
    pub fn from_utf16be_lossy(v: &[u8]) -> String;
}
```

These are versions of `String::from_utf16` that explicitly take [UTF-16LE and UTF-16BE](https://unicode.org/faq/utf_bom.html#gen7). Notably, we can do better than just the obvious `decode_utf16(v.array_chunks::<2>().copied().map(u16::from_le_bytes)).collect()` in that:

- We handle the case where the byte slice is not an even number of bytes, and
- In the case that the UTF-16 is native endian and the slice is aligned, we can forward to `String::from_utf16`.

If the Unicode Consortium actively defines how to handle character replacement when decoding a UTF-16 bytestream with a trailing odd byte, I was unable to find reference. However, the behavior implemented here is fairly self-evidently correct: replace the single errant byte with the replacement character.
2023-10-11 03:53:16 +03:00
..
alloc run alloc benchmarks in Miri and fix UB 2022-11-07 10:34:04 +01:00
boxed More IS_ZST in library 2023-04-21 16:29:27 -07:00
collections Make BTreeSet::new_in const 2023-10-09 11:17:56 +02:00
ffi fixed documentation of from<CString> for Rc<CStr>: Arc -> Rc 2023-07-02 10:07:52 +06:00
raw_vec Add a unit test for zero-sized types in RawVec. 2021-11-26 19:30:45 +11:00
rc Introduce alloc::::UniqueRc 2023-06-19 12:24:06 -07:00
slice ignore core, alloc and test tests that require unwinding on panic=abort 2023-06-13 15:53:24 +02:00
sync Add Arc::into_inner for safely discarding Arcs without calling the destructor on the inner type. 2023-01-22 01:43:25 +09:00
testing Share testing utilities with non-btree test cases 2022-05-02 10:07:50 +02:00
vec Auto merge of #111278 - EFanZh:implement-from-array-refs-for-vec, r=dtolnay 2023-09-28 04:26:40 +00:00
alloc.rs Rollup merge of #115280 - RalfJung:panic-cleanup-triple-backtrace, r=Amanieu 2023-08-28 08:13:59 +02:00
borrow.rs Add more diagnostic items for clippy 2023-10-05 18:21:47 -04:00
boxed.rs avoid transmuting Box when we can just cast raw pointers instead 2023-08-14 10:15:25 +02:00
fmt.rs Improve documentation on when signes are printed by default 2023-09-03 00:13:44 +02:00
lib.rs Use addr_eq in {Arc,Rc}::ptr_eq 2023-10-02 17:32:01 -07:00
macros.rs Update doc for alloc::format! and core::concat! 2023-09-06 15:11:21 +02:00
raw_vec.rs Eliminate ZST allocations in Box and Vec 2023-07-13 15:00:53 +01:00
rc.rs Add more diagnostic items for clippy 2023-10-05 18:21:47 -04:00
slice.rs Add suggestion for some #[deprecated] items 2023-08-21 12:51:51 +03:00
str.rs [nit] Fix a comment typo. 2023-08-15 14:26:14 -05:00
string.rs Rollup merge of #95967 - CAD97:from-utf16, r=dtolnay 2023-10-11 03:53:16 +03:00
sync.rs Add more diagnostic items for clippy 2023-10-05 18:21:47 -04:00
task.rs Updating Wake example to use new 'pin!' macro 2023-04-25 13:50:50 +02:00
tests.rs fix an alloc test 2023-03-03 17:47:48 +00:00