sized_copy/
sized_copy.rs

1use std::{
2    fs::File,
3    io::{self, Read},
4};
5
6use transfer_progress::SizedTransfer;
7
8/// 1 GiB
9const DATA_TO_TRANSFER: u64 = 1024 * 1024 * 1024;
10
11fn main() -> io::Result<()> {
12    let reader = File::open("/dev/urandom")?.take(DATA_TO_TRANSFER);
13    let writer = io::sink();
14
15    // Create the transfer monitor
16    let transfer = SizedTransfer::new(reader, writer, DATA_TO_TRANSFER);
17
18    while !transfer.is_complete() {
19        std::thread::sleep(std::time::Duration::from_secs(1));
20        // {:#} makes Transfer use SI units (MiB instead of MB)
21        println!("{:#}", transfer);
22    }
23
24    // Catch any errors and retrieve the reader and writer
25    let (_reader, _writer) = transfer.finish()?;
26    Ok(())
27}