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-21 05:19:49 +0100
commit5502c6d320f05f43239fc8e2b2839eb3fd5d742a (patch)
tree76f5d1d5685f6281789b4559db1bd257855b774b /apps/cassiopeia/src/format/mod.rs
parentafd8a74e43fc57662381b16d418a559f471c80f5 (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));
+}