Skip to content

Commit c6ba81c

Browse files
committed
add write_all to AsyncWrite
and use it to implement io::copy
1 parent 3c182fc commit c6ba81c

File tree

2 files changed

+12
-9
lines changed

2 files changed

+12
-9
lines changed

src/io/copy.rs

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,6 @@ where
1212
if bytes_read == 0 {
1313
break 'read Ok(());
1414
}
15-
let mut slice = &buf[0..bytes_read];
16-
17-
'write: loop {
18-
let bytes_written = writer.write(slice).await?;
19-
slice = &slice[bytes_written..];
20-
if slice.is_empty() {
21-
break 'write;
22-
}
23-
}
15+
writer.write_all(&buf[0..bytes_read]).await?;
2416
}
2517
}

src/io/write.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,15 @@ pub trait AsyncWrite {
55
// Required methods
66
async fn write(&mut self, buf: &[u8]) -> io::Result<usize>;
77
async fn flush(&mut self) -> io::Result<()>;
8+
9+
async fn write_all(&mut self, buf: &[u8]) -> io::Result<()> {
10+
let mut to_write = &buf[0..];
11+
loop {
12+
let bytes_written = self.write(to_write).await?;
13+
to_write = &to_write[bytes_written..];
14+
if to_write.is_empty() {
15+
return Ok(());
16+
}
17+
}
18+
}
819
}

0 commit comments

Comments
 (0)