about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAlex Saveau <saveau.alexandre@gmail.com>2024-11-02 14:23:01 -0400
committerAlex Saveau <saveau.alexandre+tmp@gmail.com>2024-11-02 14:26:21 -0400
commit770b15693a6a815b643ffe3aabdf2ed0ce8daa67 (patch)
tree69ef6fada54e93300c4f07abc514927a9cfb6792
parent07cbbdd69363da97075650e9be24b78af0bcdd23 (diff)
downloadrust-770b15693a6a815b643ffe3aabdf2ed0ce8daa67.tar.gz
rust-770b15693a6a815b643ffe3aabdf2ed0ce8daa67.zip
Add BorrowedBuf::into_filled{,_mut} methods to allow returning buffer with original lifetime
-rw-r--r--library/core/src/io/borrowed_buf.rs20
1 files changed, 20 insertions, 0 deletions
diff --git a/library/core/src/io/borrowed_buf.rs b/library/core/src/io/borrowed_buf.rs
index dbc60aa8154..4227e503ba7 100644
--- a/library/core/src/io/borrowed_buf.rs
+++ b/library/core/src/io/borrowed_buf.rs
@@ -108,6 +108,26 @@ impl<'data> BorrowedBuf<'data> {
         }
     }
 
+    /// Returns a shared reference to the filled portion of the buffer with its original lifetime.
+    #[inline]
+    pub fn into_filled(self) -> &'data [u8] {
+        // SAFETY: We only slice the filled part of the buffer, which is always valid
+        unsafe {
+            let buf = self.buf.get_unchecked(..self.filled);
+            MaybeUninit::slice_assume_init_ref(buf)
+        }
+    }
+
+    /// Returns a mutable reference to the filled portion of the buffer with its original lifetime.
+    #[inline]
+    pub fn into_filled_mut(self) -> &'data mut [u8] {
+        // SAFETY: We only slice the filled part of the buffer, which is always valid
+        unsafe {
+            let buf = self.buf.get_unchecked_mut(..self.filled);
+            MaybeUninit::slice_assume_init_mut(buf)
+        }
+    }
+
     /// Returns a cursor over the unfilled part of the buffer.
     #[inline]
     pub fn unfilled<'this>(&'this mut self) -> BorrowedCursor<'this> {