aboutsummaryrefslogtreecommitdiff
path: root/apps/cassiopeia/src/format/mod.rs
diff options
context:
space:
mode:
authorMx Kookie <kookie@spacekookie.de>2020-12-11 13:38:58 +0000
committerMx Kookie <kookie@spacekookie.de>2020-12-11 13:38:58 +0000
commit30e12f9a347297c78a7fad7bd9aeb51ea0e65f5e (patch)
tree1d2d91ad11cf8c685a1ff0149b6c0069fc0689a5 /apps/cassiopeia/src/format/mod.rs
parenta40e26f8cef4103e94be13edcc0044290ac141d7 (diff)
cassiopeia: implementing basic file parser
Diffstat (limited to 'apps/cassiopeia/src/format/mod.rs')
-rw-r--r--apps/cassiopeia/src/format/mod.rs26
1 files changed, 24 insertions, 2 deletions
diff --git a/apps/cassiopeia/src/format/mod.rs b/apps/cassiopeia/src/format/mod.rs
index 766bb22be13e..beab2f7aac66 100644
--- a/apps/cassiopeia/src/format/mod.rs
+++ b/apps/cassiopeia/src/format/mod.rs
@@ -1,3 +1,25 @@
-//! cassiopeia file format handling
+//! cassiopeia file format
-pub(crate) mod lexer;
+mod lexer;
+mod parser;
+
+pub(crate) use lexer::{LineLexer, LineToken, Token};
+pub(crate) use parser::LineCfg;
+
+use crate::TimeFile;
+use std::{fs::File, io::Read};
+
+pub(crate) fn load_file(path: &str) {
+ let mut f = File::open(path).unwrap();
+ let mut content = String::new();
+ f.read_to_string(&mut content).unwrap();
+
+ let mut lines: Vec<String> = content.split("\n").map(|l| l.to_owned()).collect();
+
+ lines
+ .iter_mut()
+ .map(|line| lexer::lex(line))
+ .map(|lex| parser::parse(lex))
+ .filter(|line| line.valid())
+ .fold(TimeFile::default(), |file, line| file.append(line));
+}