From 431c0b498f0e3da4d1bd4ae58d201aaba19a8bc7 Mon Sep 17 00:00:00 2001 From: Thomas de Zeeuw Date: Thu, 21 Mar 2024 22:37:55 +0100 Subject: [PATCH] Implement Write for Vec --- rt/src/io/traits.rs | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/rt/src/io/traits.rs b/rt/src/io/traits.rs index ec8d47aa..34b46e9e 100644 --- a/rt/src/io/traits.rs +++ b/rt/src/io/traits.rs @@ -405,6 +405,45 @@ impl Write for &mut [u8] { } } +impl Write for Vec { + async fn write(&mut self, buf: B) -> io::Result<(B, usize)> { + self.extend_from_slice(buf.as_slice()); + let written = buf.len(); + Ok((buf, written)) + } + + async fn write_all(&mut self, buf: B) -> io::Result { + self.extend_from_slice(buf.as_slice()); + Ok(buf) + } + + fn is_write_vectored(&self) -> bool { + false + } + + async fn write_vectored, const N: usize>( + &mut self, + bufs: B, + ) -> io::Result<(B, usize)> { + let mut written = 0; + for buf in bufs.as_io_slices() { + self.extend_from_slice(&buf); + written += buf.len(); + } + Ok((bufs, written)) + } + + async fn write_vectored_all, const N: usize>( + &mut self, + bufs: B, + ) -> io::Result { + for buf in bufs.as_io_slices() { + self.extend_from_slice(&buf); + } + Ok(bufs) + } +} + impl Write for Sink { async fn write(&mut self, buf: B) -> io::Result<(B, usize)> { let len = buf.len();