summaryrefslogtreecommitdiffstats
path: root/src/io
diff options
context:
space:
mode:
authorJiayi Zhao <jeff.no.zhao@gmail.com>2019-06-05 13:43:16 -0400
committerJiayi Zhao <jeff.no.zhao@gmail.com>2019-06-05 13:43:16 -0400
commit8799211cf9e7547416618725a86463444ed9e342 (patch)
treedfb3b73905a48f341051585845214589b07d21b2 /src/io
parent724ec36a7ab0dadb0229b9a16eb6179b032be39d (diff)
replace unnecessary path copying with references instead
Diffstat (limited to 'src/io')
-rw-r--r--src/io/dirlist.rs26
1 files changed, 16 insertions, 10 deletions
diff --git a/src/io/dirlist.rs b/src/io/dirlist.rs
index 0ecd333..f7a57a4 100644
--- a/src/io/dirlist.rs
+++ b/src/io/dirlist.rs
@@ -85,13 +85,10 @@ impl JoshutoDirList {
self.contents.iter().filter(|entry| entry.is_selected())
}
- pub fn get_selected_paths(&self) -> Option<Vec<path::PathBuf>> {
- let vec: Vec<path::PathBuf> = self
- .selected_entries()
- .map(|e| e.file_path().clone())
- .collect();
+ pub fn get_selected_paths(&self) -> Option<Vec<&path::PathBuf>> {
+ let vec: Vec<&path::PathBuf> = self.selected_entries().map(|e| e.file_path()).collect();
if vec.is_empty() {
- Some(vec![self.get_curr_ref()?.file_path().clone()])
+ Some(vec![self.get_curr_ref()?.file_path()])
} else {
Some(vec)
}
@@ -127,10 +124,19 @@ fn read_dir_list(
sort_option: &sort::SortOption,
) -> Result<Vec<JoshutoDirEntry>, std::io::Error> {
let filter_func = sort_option.filter_func();
- let results: fs::ReadDir = fs::read_dir(path)?;
- let result_vec: Vec<JoshutoDirEntry> = results
+ let results: Vec<JoshutoDirEntry> = fs::read_dir(path)?
.filter(filter_func)
- .filter_map(sort::map_entry_default)
+ .filter_map(map_entry_default)
.collect();
- Ok(result_vec)
+ Ok(results)
+}
+
+fn map_entry_default(result: Result<fs::DirEntry, std::io::Error>) -> Option<JoshutoDirEntry> {
+ match result {
+ Ok(direntry) => match JoshutoDirEntry::from(&direntry) {
+ Ok(s) => Some(s),
+ Err(_) => None,
+ },
+ Err(_) => None,
+ }
}