diff --git a/crates/mist-api/src/lib.mist b/crates/mist-api/src/lib.mist index 450ee41..ac42ad7 100644 --- a/crates/mist-api/src/lib.mist +++ b/crates/mist-api/src/lib.mist @@ -1,2 +1,3 @@ pub mod builder; -pub mod transpiler; \ No newline at end of file +pub mod transpiler; +pub mod modules; \ No newline at end of file diff --git a/crates/mist-api/src/main.mist b/crates/mist-api/src/main.mist index 87e4cda..a9d9a94 100644 --- a/crates/mist-api/src/main.mist +++ b/crates/mist-api/src/main.mist @@ -1,4 +1,5 @@ pub mod builder; pub mod transpiler; +pub mod modules; void main() {} \ No newline at end of file diff --git a/crates/mist-api/src/modules.mist b/crates/mist-api/src/modules.mist new file mode 100644 index 0000000..fa806cc --- /dev/null +++ b/crates/mist-api/src/modules.mist @@ -0,0 +1,61 @@ +use ; +use ; +use ; +use ; + +pub class Module { + pub String name; + pub PathBuf path; + pub Vec children; + + pub constructor(PathBuf mist_path) { + self.children = new Vec(); + self.name = mist_path.file_stem() + .and_then(|var s| s.to_str()).expect("Failed to get module name").to_string(); + self.path = mist_path; + + if (self.path.is_dir()) { + var entries = match (fs::read_dir(&self.path)) { + Ok[entries] => entries; + Err[e] => { + eprintln!( + "error: failed to read directory {}\n {}", + self.path.display(), + e + ); + + process::exit(1); + } + }; + + for (entry : entries) { + var entry = match (entry) { + Ok[entry] => entry; + Err[e] => { + eprintln!("error: failed to read directory entry\n {}", e); + + process::exit(1); + } + }; + + PathBuf child_path = entry.path(); + + self.children.push(new Module(child_path)); + } + } + } +} + +bool should_skip(Path* source, Path* output) { + var src_time = fs::metadata(source) + .ok() + .and_then(|var v| v.modified().ok()); + + var out_time = fs::metadata(output) + .ok() + .and_then(|var v| v.modified().ok()); + + out_time + .map(|var out_time| out_time >= src_time.unwrap()) + .unwrap_or_default() +}