duplicate_finder/
path_files.rs1use std::{cell::RefCell, path::PathBuf, rc::Rc};
2
3pub fn get_all_file_paths<T>(into_path_buf: T) -> Vec<PathBuf>
4where
5 T: Into<PathBuf>,
6{
7 let ref_cell = &mut RefCell::new(Vec::new());
8 let rc = Rc::new(ref_cell);
9 get_all_file_paths_recursive(into_path_buf, Rc::clone(&rc));
10 let clone = rc.borrow_mut().clone();
11 clone
12}
13
14fn get_all_file_paths_recursive<T>(path_buf: T, vec: Rc<&mut RefCell<Vec<PathBuf>>>)
15where
16 T: Into<PathBuf>,
17{
18 let read_dir = std::fs::read_dir(path_buf.into());
19
20 if let Ok(read_dir) = read_dir {
21 for dir_entry in read_dir {
22 if let Ok(dir_entry) = dir_entry {
23 let metadata = dir_entry.metadata().expect("Can't get file metadata.");
24 let path_of_entry = dir_entry.path();
25 let path_of_entry_clone = path_of_entry.clone();
26
27 if metadata.is_file() {
28 vec.borrow_mut().push(path_of_entry_clone);
29 } else if metadata.is_dir() {
30 get_all_file_paths_recursive(path_of_entry, Rc::clone(&vec));
31 }
32 }
33 }
34 }
35}