#[macro_use] extern crate log; extern crate toml; extern crate modelica_parser; pub mod modelica_model; pub mod transpile_scheme; pub mod transpile_js; use std::path::Path; use std::fs; use std::io::Read; use std::fs::File; #[derive(Debug, PartialEq)] pub enum ModelVarType { Independent, Dependent, Constant, Time, State, Parameter, } #[derive(Debug, PartialEq)] pub struct ModelVar { pub slug: String, pub name_en: Option, pub vtype: ModelVarType, pub latex: Option, pub units_si: Option, } #[derive(Debug, PartialEq)] pub struct ModelEntry { pub ast: modelica_parser::ModelicaModel, pub markdown: String, } pub fn load_model_entry(p: &Path) -> Result { debug!("Attempting to load model from: {:?}", p); let ast = { let mut s = String::new(); try!(File::open(p.join("model.modelica")) .and_then(|mut f| f.read_to_string(&mut s)) .map_err(|e| e.to_string())); try!(modelica_parser::parse_model(&s).map_err(|e| format!("{:?}", e))) }; let markdown = { let mut s = String::new(); try!(File::open(p.join("page.md")) .and_then(|mut f| f.read_to_string(&mut s)) .map_err(|e| e.to_string())); s }; Ok(ModelEntry { ast: ast, markdown: markdown, }) } pub fn search_models(p: &Path) -> Vec { if fs::metadata(p).unwrap().is_dir() { fs::read_dir(p) .unwrap() .map(|x| x.unwrap()) .filter(|x| x.metadata().unwrap().is_dir()) .filter(|x| x.path().join("model.modelica").exists()) .map(|x| x.path().to_string_lossy().to_string()) .collect() } else { vec![] } }