From 9b8756579b9cb87f83868b6cbd86e1a8b79d7c32 Mon Sep 17 00:00:00 2001 From: vandomej Date: Fri, 1 Oct 2021 01:12:53 -0700 Subject: [PATCH] Using metadata method on PathBuf --- file_linked/src/lib.rs | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/file_linked/src/lib.rs b/file_linked/src/lib.rs index 7c2d0e5..629d6bd 100644 --- a/file_linked/src/lib.rs +++ b/file_linked/src/lib.rs @@ -257,7 +257,7 @@ where /// let mut file = OpenOptions::new() /// .write(true) /// .create(true) - /// .open(path.clone()) + /// .open(&path) /// .expect("Unable to create file"); /// /// write!(file, "{}", serde_json::to_string(&test) @@ -279,22 +279,26 @@ where /// # } /// ``` pub fn from_file(path: path::PathBuf) -> Result, String> { - let meta = fs::metadata(&path); + if !path.is_file() { + return Err(format!("{} is not a valid file path", path.display())); + } - match &meta { - Ok(m) if m.is_file() && path.is_file()=> { - let file = fs::OpenOptions::new() - .read(true) - .open(&path) - .map_err(|_| format!("Unable to open file {}", path.display()))?; + let metadata = path + .metadata() + .map_err(|_| format!("Error obtaining metadata for {}", path.display()))?; - let val = serde_json::from_reader(file) - .map_err(|_| String::from("Unable to parse value from file."))?; + if metadata.is_file() { + let file = fs::OpenOptions::new() + .read(true) + .open(&path) + .map_err(|_| format!("Unable to open file {}", path.display()))?; - Ok(FileLinked { val, path }) - } - Ok(_) => Err(format!("{} is not a file.", path.display())), - _ => Err(format!("Error parsing file path {}", path.display())), + let val = serde_json::from_reader(file) + .map_err(|_| String::from("Unable to parse value from file."))?; + + Ok(FileLinked { val, path }) + } else { + Err(format!("{} is not a file.", path.display())) } } }