rsv_lib/io/
size.rs

1use crate::args::Size;
2use crate::utils::cli_result::CliResult;
3use std::io::{stdin, Read};
4
5impl Size {
6    pub fn io_run(&self) -> CliResult {
7        let mut buffer = [0; 1024]; // A buffer to read into
8        let mut total_bytes_read = 0;
9
10        loop {
11            let bytes_read = stdin().read(&mut buffer)?;
12            if bytes_read == 0 {
13                // End of input
14                break;
15            }
16            total_bytes_read += bytes_read;
17        }
18
19        let filesize_kb = total_bytes_read as f64 / 1024.0;
20        let filesize_mb = total_bytes_read as f64 / (1024.0 * 1024.0);
21        let filesize_gb = total_bytes_read as f64 / (1024.0 * 1024.0 * 1024.0);
22
23        if filesize_gb >= 1.0 {
24            println!("File Size: {:.2} GB", filesize_gb);
25        } else if filesize_mb >= 1.0 {
26            println!("File Size: {:.2} MB", filesize_mb);
27        } else {
28            println!("File Size: {:.2} KB", filesize_kb);
29        }
30
31        Ok(())
32    }
33}