use crate::Task;
use std::io::Read;
pub struct ReaderTask<T: Read> {
reader: T,
task: Task,
}
impl<T: Read> ReaderTask<T> {
#[must_use]
pub fn new(reader: T, task: Task) -> Self {
ReaderTask { reader, task }
}
}
impl<T: Read> Drop for ReaderTask<T> {
fn drop(&mut self) {
self.task.mark_all_completed();
}
}
impl<T: Read> Read for ReaderTask<T> {
fn read(&mut self, buf: &mut [u8]) -> std::io::Result<usize> {
let read = self.reader.read(buf)?;
self.task.mark_some_completed(read as u64);
Ok(read)
}
}