use crate::parser::{Parser, ParserResult, PrefixParselet};
use crate::types::{Expression, ExpressionKind, Token, TokenKind};
#[derive(Debug, Clone)]
pub struct ListParselet;
impl PrefixParselet for ListParselet {
fn parse(&self, parser: &mut Parser, _token: Token) -> ParserResult {
let kind;
if parser.peek()?.kind == TokenKind::RightBracket {
kind = ExpressionKind::List(None);
} else {
kind = ExpressionKind::List(Some(Box::new(parser.parse_expression(0)?)));
}
parser.consume_expect(TokenKind::RightBracket)?;
Ok(Expression {
kind,
start_pos: 0,
end_pos: 0,
})
}
}