// temporary #![allow(dead_code)] use std::vec::Vec; pub struct Parser { input: String, line: i32, } pub struct Var { name: String, value: String, } const OBJECTS: [&str; 8] = ["src", "dst", "wdir", "type", "attr", "ndata", "data", "arg"]; const ACTION: [&str; 1] = ["plumb"]; const VERBS: [&str; 5] = ["add", "is", "isdir", "isfile", "set"]; impl Parser { pub fn new(input: String) -> Parser { Self { input, line: 0 } } pub fn parse(self: &Self) { let rules = self.collect_rules(); println!("{rules:#?}") } fn collect_rules(self: &Self) -> Vec> { let mut rules: Vec> = vec![]; let mut current_rule: Vec = vec![]; let mut lines = self.input.lines().peekable(); while lines.peek().is_some() { // clean line from whitespace characters, testing file includes many let line: String = lines .next() .unwrap() .to_string() .chars() .map(|c| if c.is_whitespace() { ' ' } else { c }) .collect(); if !line.starts_with("#") && !line.trim().is_empty() { current_rule.push(line); } else if !current_rule.is_empty() { rules.push(current_rule); current_rule = vec![]; } } rules } }