use std::iter::Map; use crate::bong::lexer::Token; pub enum Node { Element { name: String, ids: Vec, classes: Vec, properties: Map>, values: Vec, }, Object(Map>), Array(Vec), Int(i64), Float(f64), String(String), Bool(bool), } // pub struct Parser { // tokens: Vec, // } // impl Parser { // pub fn new(lexer: Lexer) -> Self { // Self { lexer } // } // } // type ParserError = String; // impl Parser { // pub fn new(tokens: Vec) -> Self { // Self { tokens, index: 0 } // } // pub fn parse_top_level(&mut self) -> Result { // match self.peek() { // Some(Token::Name(_)) => self.parse_element(), // Some(_) => self.parse_value(), // None => Err("expected value or element".to_owned()), // } // } // fn parse_element(&mut self) -> Result {} // fn parse_value(&mut self) -> Result { // match self.peek() { // Some(Token::LBrace(_)) => self.parse_object(), // Some(Token::LBracket(_)) => self.parse_object(), // Some(_) => Err("unexpected token, expected value".to_owned()), // None => Err("expected value".to_owned()), // } // } // fn parse_object(&mut self) -> Result {} // fn parse_array(&mut self) -> Result {} // fn parse_number(&mut self) -> Result {} // fn parse_string(&mut self) -> Result {} // fn parse_bool(&mut self) -> Result {} // fn parse_null(&mut self) -> Result {} // fn step(&mut self) { // self.index += 1 // } // fn peek(&self) -> Option<&Token> { // self.tokens.get(self.index) // } // }