diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/main.rs | 36 |
1 files changed, 20 insertions, 16 deletions
diff --git a/src/main.rs b/src/main.rs index bb1701a..28c3acf 100644 --- a/src/main.rs +++ b/src/main.rs @@ -59,7 +59,14 @@ pub fn build_path(filename: &str) -> Result<PathBuf, io::Error> { .iter() .collect(); - fs::canonicalize(&relative) + if relative.exists() { + fs::canonicalize(&relative) + } else { + fs::File::create(relative.clone())?; + let full_path = fs::canonicalize(&relative.clone())?; + fs::remove_file(relative)?; + Ok(full_path) + } } pub fn rsycle(rsyclebin: PathBuf, old_path: PathBuf) -> Result<(), io::Error> { @@ -148,13 +155,7 @@ pub fn most_recent_current_path(rsyclebin: PathBuf, path: PathBuf) -> Result<Pat } pub fn list(rsyclebin: PathBuf) -> Result<(), io::Error> { - let mut paths: Vec<PathBuf> = fs::read_dir(rsyclebin.clone()) - .unwrap() - .map(Result::unwrap) - .map(|dir| dir.path()) - .collect(); - - for current_path in paths.iter_mut() { + for current_path in all_paths(rsyclebin.clone())? { let mut filename: Vec<&str> = current_path .file_name() .unwrap() @@ -186,7 +187,9 @@ fn find_original_path(rsyclebin: PathBuf, current_path: PathBuf) -> Result<PathB let mut reader = ReaderBuilder::new().has_headers(false).from_reader(file); - let path_str = current_path.to_str().unwrap(); + let path_str = current_path + .to_str() + .ok_or_else(|| io::Error::new(io::ErrorKind::NotFound, "Cannot convert."))?; Ok(PathBuf::from( reader @@ -199,13 +202,7 @@ fn find_original_path(rsyclebin: PathBuf, current_path: PathBuf) -> Result<PathB } pub fn empty(rsyclebin: PathBuf) -> Result<(), io::Error> { - let paths: Vec<PathBuf> = fs::read_dir(rsyclebin.clone()) - .unwrap() - .map(Result::unwrap) - .map(|dir| dir.path()) - .collect(); - - for path in paths { + for path in all_paths(rsyclebin)? { if fs::remove_file(path.clone()).is_err() { fs::remove_dir_all(path)? } @@ -214,6 +211,13 @@ pub fn empty(rsyclebin: PathBuf) -> Result<(), io::Error> { Ok(()) } +fn all_paths(rsyclebin: PathBuf) -> Result<Vec<PathBuf>, io::Error> { + Ok(fs::read_dir(rsyclebin.clone())? + .map(Result::unwrap) + .map(|dir| dir.path()) + .collect()) +} + fn restore_cli(_rsyclebin: PathBuf) { println!("unimplemented!") } |