pub struct SizedTransfer<R, W>{ /* private fields */ }Expand description
Monitors the progress of a transfer with a known size.
Implementations§
Source§impl<R, W> SizedTransfer<R, W>
impl<R, W> SizedTransfer<R, W>
Sourcepub fn new(reader: R, writer: W, size: u64) -> Self
pub fn new(reader: R, writer: W, size: u64) -> Self
Creates and starts a new SizedTransfer.
§Example
use transfer_progress::SizedTransfer;
use std::fs::File;
use std::io::Read;
let reader = File::open("file1.txt")?.take(1024); // Bytes
let writer = File::create("file2.txt")?;
let transfer = SizedTransfer::new(reader, writer, 1024);Examples found in repository?
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}Sourcepub fn size(&self) -> u64
pub fn size(&self) -> u64
Returns the total size (in bytes) of the transfer, as specified when calling
new.
§Example
use transfer_progress::SizedTransfer;
use std::fs::File;
use std::io::Read;
let reader = File::open("file1.txt")?.take(1024); // Bytes
let writer = File::create("file2.txt")?;
let transfer = SizedTransfer::new(reader, writer, 1024);
assert_eq!(transfer.size(), 1024);Sourcepub fn remaining(&self) -> u64
pub fn remaining(&self) -> u64
Returns the number of bytes remaining.
§Example
use transfer_progress::SizedTransfer;
use std::fs::File;
use std::io::Read;
let reader = File::open("file1.txt")?.take(1024); // Bytes
let writer = File::create("file2.txt")?;
let transfer = SizedTransfer::new(reader, writer, 1024);
while !transfer.is_complete() {
println!("{} bytes remaining", transfer.remaining());
std::thread::sleep(std::time::Duration::from_secs(1));
}Sourcepub fn finish(self) -> Result<(R, W)>
pub fn finish(self) -> Result<(R, W)>
Consumes the SizedTransfer, blocking until the transfer is complete.
If the transfer was successful, returns Ok(reader, writer), otherwise returns
the error.
If the transfer is already complete, returns immediately.
§Example
use transfer_progress::SizedTransfer;
use std::fs::File;
use std::io::Read;
let reader = File::open("file1.txt")?.take(1024); // Bytes
let writer = File::create("file2.txt")?;
let transfer = SizedTransfer::new(reader, writer, 1024);
let (reader, writer) = transfer.finish()?;Examples found in repository?
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}Sourcepub fn fraction_transferred(&self) -> f64
pub fn fraction_transferred(&self) -> f64
Returns a fraction between 0.0 and 1.0 representing the state of the transfer.
§Example
use transfer_progress::SizedTransfer;
use std::fs::File;
use std::io::Read;
let reader = File::open("file1.txt")?.take(1024); // Bytes
let writer = File::create("file2.txt")?;
let transfer = SizedTransfer::new(reader, writer, 1024);
while !transfer.is_complete() {
println!("Transfer is {:.0}% complete", transfer.fraction_transferred() * 100.0);
std::thread::sleep(std::time::Duration::from_secs(1));
}Sourcepub fn eta(&self) -> Option<Duration>
pub fn eta(&self) -> Option<Duration>
Returns the approximate remaining time until this transfer completes. Returns None if
this cannot be calculated (I.E. no bytes have been transferred yet, so a speed cannot be
determined).
§Example
use transfer_progress::SizedTransfer;
use std::fs::File;
use std::io::Read;
let reader = File::open("file1.txt")?.take(1024); // Bytes
let writer = File::create("file2.txt")?;
let transfer = SizedTransfer::new(reader, writer, 1024);
while !transfer.is_complete() {
if let Some(eta) = transfer.eta() {
println!("Transfer will complete in approximately {:?}", eta);
} else {
println!("Transfer completion time is unknown");
}
std::thread::sleep(std::time::Duration::from_secs(1));
}Methods from Deref<Target = Transfer<R, W>>§
Sourcepub fn is_complete(&self) -> bool
pub fn is_complete(&self) -> bool
Tests if the transfer is complete
§Example
use transfer_progress::Transfer;
use std::fs::File;
let reader = File::open("file1.txt")?;
let writer = File::create("file2.txt")?;
let transfer = Transfer::new(reader, writer);
while !transfer.is_complete() {
println!("Not complete yet");
std::thread::sleep(std::time::Duration::from_secs(1));
}
println!("Complete!");Examples found in repository?
8fn main() -> io::Result<()> {
9 let reader = File::open("/dev/urandom")?.take(1024 * 1024 * 1024); // 1 GiB
10 let writer = io::sink();
11
12 // Create the transfer monitor
13 let transfer = Transfer::new(reader, writer);
14
15 while !transfer.is_complete() {
16 std::thread::sleep(std::time::Duration::from_secs(1));
17 // {:#} makes Transfer use SI units (MiB instead of MB)
18 println!("{:#}", transfer);
19 }
20
21 // Catch any errors and retrieve the reader and writer
22 let (_reader, _writer) = transfer.finish()?;
23 Ok(())
24}More examples
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}Sourcepub fn transferred(&self) -> u64
pub fn transferred(&self) -> u64
Returns the number of bytes transferred thus far between the reader and the writer.
§Example
use transfer_progress::Transfer;
use std::fs::File;
let reader = File::open("file1.txt")?;
let writer = File::create("file2.txt")?;
let transfer = Transfer::new(reader, writer);
while !transfer.is_complete() {
println!("{} bytes transferred so far", transfer.transferred());
std::thread::sleep(std::time::Duration::from_secs(1));
}
println!("Complete!");Sourcepub fn running_time(&self) -> Duration
pub fn running_time(&self) -> Duration
Returns the elapsed time since the transfer started.
§Example
use transfer_progress::Transfer;
use std::fs::File;
let reader = File::open("file1.txt")?;
let writer = File::create("file2.txt")?;
let transfer = Transfer::new(reader, writer);
while !transfer.is_complete() {}
println!("Transfer took {:?}", transfer.running_time());Sourcepub fn speed(&self) -> u64
pub fn speed(&self) -> u64
Returns the average speed, in bytes per second, of the transfer.
§Example
use transfer_progress::Transfer;
use std::fs::File;
let reader = File::open("file1.txt")?;
let writer = File::create("file2.txt")?;
let transfer = Transfer::new(reader, writer);
while !transfer.is_complete() {
println!("{}B/s", transfer.speed());
std::thread::sleep(std::time::Duration::from_secs(1));
}