pub struct ProgressReader<R: Read> { /* private fields */ }Expand description
Wrapper around a Read that reports the progress made.
Used to monitor a file downloading or other slow IO task in a progress bar.
§Examples
use cursive_core::utils::{Counter, ProgressReader};
use std::io::Read;
// Read a file and report the progress
let file = std::fs::File::open("large_file").unwrap();
let counter = Counter::new(0);
let mut reader = ProgressReader::new(counter.clone(), file);
std::thread::spawn(move || {
// Left as an exercise: use an AtomicBool for a stop condition!
loop {
let progress = counter.get();
println!("Read {} bytes so far", progress);
}
});
// As we read data, the counter will be updated and the control thread
// will monitor the progress.
let mut buffer = Vec::new();
reader.read_to_end(&mut buffer).unwrap();Implementations§
Source§impl<R: Read> ProgressReader<R>
impl<R: Read> ProgressReader<R>
Sourcepub fn new(counter: Counter, reader: R) -> Self
pub fn new(counter: Counter, reader: R) -> Self
Creates a new ProgressReader around reader.
counter will be updated with the number of bytes read.
You should make sure the progress bar knows how many bytes should be received.
Sourcepub fn deconstruct(self) -> (R, Counter)
pub fn deconstruct(self) -> (R, Counter)
Unwraps this ProgressReader, returning the reader and counter.
Trait Implementations§
Source§impl<R: Clone + Read> Clone for ProgressReader<R>
impl<R: Clone + Read> Clone for ProgressReader<R>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl<R: Read> Read for ProgressReader<R>
impl<R: Read> Read for ProgressReader<R>
Source§fn read(&mut self, buf: &mut [u8]) -> Result<usize>
fn read(&mut self, buf: &mut [u8]) -> Result<usize>
Pull some bytes from this source into the specified buffer, returning
how many bytes were read. Read more
1.36.0 · Source§fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error>
fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error>
Like
read, except that it reads into a slice of buffers. Read moreSource§fn is_read_vectored(&self) -> bool
fn is_read_vectored(&self) -> bool
🔬This is a nightly-only experimental API. (
can_vector)1.0.0 · Source§fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize, Error>
fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize, Error>
Reads all bytes until EOF in this source, placing them into
buf. Read more1.0.0 · Source§fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>
fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>
Reads all bytes until EOF in this source, appending them to
buf. Read more1.6.0 · Source§fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>
fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>
Reads the exact number of bytes required to fill
buf. Read moreSource§fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error>
fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error>
🔬This is a nightly-only experimental API. (
read_buf)Pull some bytes from this source into the specified buffer. Read more
Source§fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<(), Error>
fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<(), Error>
🔬This is a nightly-only experimental API. (
read_buf)Reads the exact number of bytes required to fill
cursor. Read more1.0.0 · Source§fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
Creates a “by reference” adaptor for this instance of
Read. Read moreAuto Trait Implementations§
impl<R> Freeze for ProgressReader<R>where
R: Freeze,
impl<R> RefUnwindSafe for ProgressReader<R>where
R: RefUnwindSafe,
impl<R> Send for ProgressReader<R>where
R: Send,
impl<R> Sync for ProgressReader<R>where
R: Sync,
impl<R> Unpin for ProgressReader<R>where
R: Unpin,
impl<R> UnwindSafe for ProgressReader<R>where
R: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more