pub struct Transfer<R, W>{ /* private fields */ }Implementations§
Source§impl<R, W> Transfer<R, W>
impl<R, W> Transfer<R, W>
Sourcepub fn new(reader: R, writer: W) -> Self
pub fn new(reader: R, writer: W) -> Self
Creates and starts a new 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);Examples found in repository?
examples/copy.rs (line 13)
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}Sourcepub fn finish(self) -> Result<(R, W)>
pub fn finish(self) -> Result<(R, W)>
Consumes the Transfer, 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::Transfer;
use std::fs::File;
let reader = File::open("file1.txt")?;
let writer = File::create("file2.txt")?;
let transfer = Transfer::new(reader, writer);
let (reader, writer) = transfer.finish()?;Examples found in repository?
examples/copy.rs (line 22)
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}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?
examples/copy.rs (line 15)
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
examples/sized_copy.rs (line 18)
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));
}Trait Implementations§
Auto Trait Implementations§
impl<R, W> Freeze for Transfer<R, W>
impl<R, W> !RefUnwindSafe for Transfer<R, W>
impl<R, W> Send for Transfer<R, W>
impl<R, W> Sync for Transfer<R, W>
impl<R, W> Unpin for Transfer<R, W>
impl<R, W> !UnwindSafe for Transfer<R, W>
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