Skip to content

Commit f4d6d87

Browse files
committed
Add IoSlice::as_bytes
1 parent 502ce82 commit f4d6d87

File tree

6 files changed

+28
-4
lines changed

6 files changed

+28
-4
lines changed

library/std/src/io/mod.rs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1491,6 +1491,30 @@ impl<'a> IoSlice<'a> {
14911491
bufs[0].advance(left);
14921492
}
14931493
}
1494+
1495+
/// Get the underlying bytes as a rust slice with the original lifetime
1496+
///
1497+
/// # Example
1498+
///
1499+
/// ```
1500+
/// use std::io::IoSlice;
1501+
///
1502+
/// let data = b"abcdef";
1503+
///
1504+
/// let mut io_slice = IoSlice::new(data);
1505+
/// let tail = io_slice.as_bytes()[3..];
1506+
///
1507+
/// // This works because `tail` doesn't borrow `io_slice`
1508+
/// io_slice = IoSlice::new(tail);
1509+
///
1510+
/// assert_eq!(io_slice.as_bytes(), b"def");
1511+
/// ```
1512+
#[unstable(feature = "io_slice_as_bytes")]
1513+
#[inline]
1514+
#[must_use]
1515+
pub const fn as_bytes(&self) -> &'a [u8] {
1516+
self.0.as_slice()
1517+
}
14941518
}
14951519

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

library/std/src/sys/pal/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/pal/unix/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/pal/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/pal/wasi/io.rs

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

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

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

Whitespace-only changes.

0 commit comments

Comments
 (0)