1use crate::Task;
6use std::io::Read;
7
8pub struct ReaderTask<T: Read> {
11 reader: T,
12 task: Task,
13}
14
15impl<T: Read> ReaderTask<T> {
16 #[must_use]
18 pub fn new(reader: T, task: Task) -> Self {
19 ReaderTask { reader, task }
20 }
21}
22
23impl<T: Read> Drop for ReaderTask<T> {
24 fn drop(&mut self) {
25 self.task.mark_all_completed();
26 }
27}
28impl<T: Read> Read for ReaderTask<T> {
29 fn read(&mut self, buf: &mut [u8]) -> std::io::Result<usize> {
30 let read = self.reader.read(buf)?;
31 self.task.mark_some_completed(read as u64);
32 Ok(read)
33 }
34}