From 98a3ef9a4717257e09faf36a34bedb7eed11ae68 Mon Sep 17 00:00:00 2001 From: Nicholas Hope Date: Mon, 11 Mar 2024 13:05:49 -0400 Subject: [PATCH] deleted --- src/walk.rs | 91 ----------------------------------------------------- 1 file changed, 91 deletions(-) delete mode 100644 src/walk.rs diff --git a/src/walk.rs b/src/walk.rs deleted file mode 100644 index 3b561b3..0000000 --- a/src/walk.rs +++ /dev/null @@ -1,91 +0,0 @@ -use rayon::prelude::*; - -use std::sync::mpsc::{Sender, channel}; -use std::fs::{read_dir, DirEntry}; -use std::io::Error; -use std::path::PathBuf; -use std::process::ExitCode; - -use crate::Args; -use crate::directory::Directory; - -pub fn walk<'a>(args: Args) -> Result { - let (tx, rx) = channel(); - - let mut total = 0; - for entry in read_dir(&args.path).unwrap() { - let entry = match entry { - Ok(e) => e, - Err(e) => { - if !args.minimal { - eprintln!("unable to open {}: {e}", args.path); - } - if args.persistant { - continue; - } else { - return Err(ExitCode::FAILURE); - } - }, - }; - - total += match total_entry(entry, &args, &tx) { - Ok(t) => t, - Err((path, error)) => { - if !args.minimal { - eprintln!("error opening {}: {error}", path.display()); - } - if args.persistant { - continue; - } else { - return Err(ExitCode::FAILURE); - } - }, - }; - } - // drop this to close the channel, so that into_iter() can end - drop(tx); - - let mut fs = Directory::make(args.path, total); - fs.extend(rx); - - Ok(fs) -} - -fn total_entry(entry: DirEntry, args: &Args, printer: &Sender<(PathBuf, u64)>) -> Result { - let path = entry.path(); - - match path.read_dir() { - Ok(dir) => { - let result = dir.par_bridge() - .filter_map(Result::ok) - .map(|entry| total_entry(entry, args, printer)) - .reduce(|| Ok(0), reduce_once); - - if let Ok(size) = result { - if !args.minimal && !args.total_only { - let _ = printer.send((path, size)); - } - } - - return result; - }, - Err(_) if path.is_file() => { - let size = unsafe { path.metadata().unwrap_unchecked() }.len(); - if !args.minimal && !args.total_only { - let _ = printer.send((path, size)); - } - return Ok(size); - }, - Err(e) => Err((path, e)), - } -} - -fn reduce_once(accum: Result, this: Result) -> Result { - // reduction function for total_entry(): - // short-circuit Errs, propagate Oks - // generic bc I'm lazy - match (accum, this) { - (Ok(n1), Ok(n2)) => Ok(n1 + n2), - (Err(e), _) | (_, Err(e)) => Err(e), - } -} \ No newline at end of file