added parallel proccessing of files
This commit is contained in:
parent
69a50326b2
commit
4e170efae2
1 changed files with 208 additions and 194 deletions
26
src/main.rs
26
src/main.rs
|
|
@ -12,6 +12,7 @@ mod extractors;
|
|||
// Extensions
|
||||
// }
|
||||
use std::{path::Path, fs};
|
||||
use rayon::prelude::*;
|
||||
use extractors::{
|
||||
extract_zip,
|
||||
extract_rar,
|
||||
|
|
@ -43,10 +44,16 @@ fn main() {
|
|||
fn run() -> i32 {
|
||||
let args: Vec<_> = std::env::args().collect();
|
||||
if args.len() < 2 {
|
||||
println!("Usage: {} <filename>", args[0]);
|
||||
println!("Usage: {} <filename1> [<filename2> ...]", args[0]);
|
||||
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()) {
|
||||
match extension {
|
||||
"zip" => {
|
||||
|
|
@ -262,9 +269,16 @@ fn run() -> i32 {
|
|||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
println!("Unknown file format");
|
||||
} else {
|
||||
println!("Unknown file format: {:?}", file_path);
|
||||
return 1;
|
||||
}
|
||||
0
|
||||
}).reduce(|| 0, |a, b| a + b);
|
||||
|
||||
if result == 0 {
|
||||
0
|
||||
} else {
|
||||
1
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue