Skip to content

Commit 4accbcd

Browse files
committed
Add IoSlice::as_bytes
1 parent 0cd939e commit 4accbcd

File tree

6 files changed

+29
-5
lines changed

6 files changed

+29
-5
lines changed

library/std/src/io/mod.rs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1292,6 +1292,30 @@ impl<'a> IoSlice<'a> {
12921292
bufs[0].advance(n - accumulated_len)
12931293
}
12941294
}
1295+
1296+
/// Get the underlying bytes as a rust slice with the original lifetime
1297+
///
1298+
/// # Example
1299+
///
1300+
/// ```
1301+
/// use std::io::IoSlice;
1302+
///
1303+
/// let data = b"abcdef";
1304+
///
1305+
/// let mut io_slice = IoSlice::new(data);
1306+
/// let tail = io_slice.as_bytes()[3..];
1307+
///
1308+
/// // This works because `tail` doesn't borrow `io_slice`
1309+
/// io_slice = IoSlice::new(tail);
1310+
///
1311+
/// assert_eq!(io_slice.as_bytes(), b"def");
1312+
/// ```
1313+
#[unstable(feature = "io_slice_as_bytes")]
1314+
#[inline]
1315+
#[must_use]
1316+
pub const fn as_bytes(&self) -> &'a [u8] {
1317+
self.0.as_slice()
1318+
}
12951319
}
12961320

12971321
#[stable(feature = "iovec", since = "1.36.0")]

library/std/src/sys/solid/io.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ impl<'a> IoSlice<'a> {
3333
}
3434

3535
#[inline]
36-
pub fn as_slice(&self) -> &[u8] {
36+
pub fn as_slice(&self) -> &'a [u8] {
3737
unsafe { slice::from_raw_parts(self.vec.iov_base as *mut u8, self.vec.iov_len) }
3838
}
3939
}

library/std/src/sys/unix/io.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ impl<'a> IoSlice<'a> {
3232
}
3333

3434
#[inline]
35-
pub fn as_slice(&self) -> &[u8] {
35+
pub fn as_slice(&self) -> &'a [u8] {
3636
unsafe { slice::from_raw_parts(self.vec.iov_base as *mut u8, self.vec.iov_len) }
3737
}
3838
}

library/std/src/sys/unsupported/io.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ impl<'a> IoSlice<'a> {
1515
}
1616

1717
#[inline]
18-
pub fn as_slice(&self) -> &[u8] {
18+
pub fn as_slice(&self) -> &'a [u8] {
1919
self.0
2020
}
2121
}

library/std/src/sys/wasi/io.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ impl<'a> IoSlice<'a> {
2929
}
3030

3131
#[inline]
32-
pub fn as_slice(&self) -> &[u8] {
32+
pub fn as_slice(&self) -> &'a [u8] {
3333
unsafe { slice::from_raw_parts(self.vec.buf as *const u8, self.vec.buf_len) }
3434
}
3535
}

library/std/src/sys/windows/io.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ impl<'a> IoSlice<'a> {
3535
}
3636

3737
#[inline]
38-
pub fn as_slice(&self) -> &[u8] {
38+
pub fn as_slice(&self) -> &'a [u8] {
3939
unsafe { slice::from_raw_parts(self.vec.buf as *mut u8, self.vec.len as usize) }
4040
}
4141
}

0 commit comments

Comments
 (0)