diff options
author | bnewbold <bnewbold@robocracy.org> | 2016-12-27 20:58:51 +0100 |
---|---|---|
committer | bnewbold <bnewbold@robocracy.org> | 2016-12-27 20:58:51 +0100 |
commit | 4e2937fc614538fd73363a41667c9472fb6ff5f3 (patch) | |
tree | 7eb354f663d6ee89549e657174ac9e257dd02095 /src/lib.rs | |
parent | d4e49815052a24e050aaf5a59214bab18bf1ede1 (diff) | |
download | modelthing-4e2937fc614538fd73363a41667c9472fb6ff5f3.tar.gz modelthing-4e2937fc614538fd73363a41667c9472fb6ff5f3.zip |
refactor error handling with error_chain
Diffstat (limited to 'src/lib.rs')
-rw-r--r-- | src/lib.rs | 19 |
1 files changed, 16 insertions, 3 deletions
@@ -2,6 +2,9 @@ #[macro_use] extern crate log; +#[macro_use] +extern crate error_chain; + extern crate toml; extern crate modelica_parser; @@ -14,6 +17,12 @@ use std::fs; use std::io::Read; use std::fs::File; +mod errors { + // Create the Error, ErrorKind, ResultExt, and Result types + error_chain! { } +} +pub use errors::*; + #[derive(Debug, PartialEq)] pub enum ModelVarType { Independent, @@ -39,7 +48,7 @@ pub struct ModelEntry { pub markdown: String, } -pub fn load_model_entry(p: &Path) -> Result<ModelEntry, String> { +pub fn load_model_entry(p: &Path) -> Result<ModelEntry> { debug!("Attempting to load model from: {:?}", p); let ast = { @@ -65,9 +74,13 @@ pub fn load_model_entry(p: &Path) -> Result<ModelEntry, String> { } pub fn search_models(p: &Path) -> Vec<String> { - if fs::metadata(p).unwrap().is_dir() { + let metadata = match fs::metadata(p) { + Err(_) => return vec![], + Ok(m) => m, + }; + if metadata.is_dir() { fs::read_dir(p) - .unwrap() + .unwrap() // exists and is_dir(); could be a race condition though? .map(|x| x.unwrap()) .filter(|x| x.metadata().unwrap().is_dir()) .filter(|x| x.path().join("model.modelica").exists()) |