diff options
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()) |