added parallel proccessing of files

This commit is contained in:
specCon18 2023-09-04 13:38:03 -04:00
parent 69a50326b2
commit 4e170efae2

View file

@ -12,6 +12,7 @@ mod extractors;
// Extensions // Extensions
// } // }
use std::{path::Path, fs}; use std::{path::Path, fs};
use rayon::prelude::*;
use extractors::{ use extractors::{
extract_zip, extract_zip,
extract_rar, extract_rar,
@ -43,10 +44,16 @@ fn main() {
fn run() -> i32 { fn run() -> i32 {
let args: Vec<_> = std::env::args().collect(); let args: Vec<_> = std::env::args().collect();
if args.len() < 2 { if args.len() < 2 {
println!("Usage: {} <filename>", args[0]); println!("Usage: {} <filename1> [<filename2> ...]", args[0]);
return 1; return 1;
} }
let fname = std::path::Path::new(&*args[1]);
// Collect all input file paths from command line arguments
let file_paths: Vec<_> = args.iter().skip(1).collect();
// Use Rayon to parallelize the extraction process
let result = file_paths.par_iter().map(|file_path| {
let fname = std::path::Path::new(file_path);
if let Some(extension) = fname.extension().and_then(|s| s.to_str()) { if let Some(extension) = fname.extension().and_then(|s| s.to_str()) {
match extension { match extension {
"zip" => { "zip" => {
@ -262,9 +269,16 @@ fn run() -> i32 {
return 1; return 1;
} }
} }
return 0; } else {
} println!("Unknown file format: {:?}", file_path);
println!("Unknown file format");
return 1; return 1;
}
0
}).reduce(|| 0, |a, b| a + b);
if result == 0 {
0
} else {
1
}
} }