27 lines
485 B
Rust
27 lines
485 B
Rust
use std::io::Read;
|
|
|
|
pub struct TrackingReader<R> {
|
|
inner: R,
|
|
pub read: usize,
|
|
}
|
|
|
|
impl<R: Read> TrackingReader<R> {
|
|
pub fn new(reader: R) -> Self {
|
|
Self {
|
|
inner: reader,
|
|
read: 0,
|
|
}
|
|
}
|
|
}
|
|
|
|
impl<R: Read> Read for TrackingReader<R> {
|
|
fn read(&mut self, buf: &mut [u8]) -> std::io::Result<usize> {
|
|
let res = self.inner.read(buf);
|
|
if let Ok(read) = res {
|
|
self.read += read;
|
|
}
|
|
|
|
res
|
|
}
|
|
}
|