summaryrefslogtreecommitdiffstats
path: root/library/std/src/io/impls.rs
diff options
context:
space:
mode:
Diffstat (limited to 'library/std/src/io/impls.rs')
-rw-r--r--library/std/src/io/impls.rs32
1 files changed, 32 insertions, 0 deletions
diff --git a/library/std/src/io/impls.rs b/library/std/src/io/impls.rs
index a7428776d..d8c8d933e 100644
--- a/library/std/src/io/impls.rs
+++ b/library/std/src/io/impls.rs
@@ -475,6 +475,24 @@ impl<A: Allocator> Read for VecDeque<u8, A> {
}
}
+/// BufRead is implemented for `VecDeque<u8>` by reading bytes from the front of the `VecDeque`.
+#[stable(feature = "vecdeque_buf_read", since = "1.75.0")]
+impl<A: Allocator> BufRead for VecDeque<u8, A> {
+ /// Returns the contents of the "front" slice as returned by
+ /// [`as_slices`][`VecDeque::as_slices`]. If the contained byte slices of the `VecDeque` are
+ /// discontiguous, multiple calls to `fill_buf` will be needed to read the entire content.
+ #[inline]
+ fn fill_buf(&mut self) -> io::Result<&[u8]> {
+ let (front, _) = self.as_slices();
+ Ok(front)
+ }
+
+ #[inline]
+ fn consume(&mut self, amt: usize) {
+ self.drain(..amt);
+ }
+}
+
/// Write is implemented for `VecDeque<u8>` by appending to the `VecDeque`, growing it as needed.
#[stable(feature = "vecdeque_read_write", since = "1.63.0")]
impl<A: Allocator> Write for VecDeque<u8, A> {
@@ -510,3 +528,17 @@ impl<A: Allocator> Write for VecDeque<u8, A> {
Ok(())
}
}
+
+#[unstable(feature = "read_buf", issue = "78485")]
+impl<'a> io::Write for core::io::BorrowedCursor<'a> {
+ fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
+ let amt = cmp::min(buf.len(), self.capacity());
+ self.append(&buf[..amt]);
+ Ok(amt)
+ }
+
+ #[inline]
+ fn flush(&mut self) -> io::Result<()> {
+ Ok(())
+ }
+}