use crate::parser::{
ast::metadata::AstNodeMeta,
error::{ParserError, ParserErrorVariant},
lexer::{
tokens::{Token, TokenTy},
IndexedToken,
},
state::ParserState,
util::NodeParserResult,
};
#[derive(Debug)]
pub struct BooleanLiteral<'src> {
pub meta: AstNodeMeta<'src>,
pub value: bool,
}
impl<'src> BooleanLiteral<'src> {
pub fn parse(parser_state: &mut ParserState<'src>) -> NodeParserResult<Self> {
for (token_ty, value) in [(TokenTy::True, true), (TokenTy::False, false)] {
if let Some(IndexedToken {
index,
token: Token { length, .. },
}) = parser_state.next_token_if_ty_eq(token_ty)
{
return Ok(BooleanLiteral {
meta: parser_state.make_ast_node_meta(index, length),
value,
});
}
}
Err(ParserError {
byte_range: parser_state.peek_byte_range(),
ty: ParserErrorVariant::Expected("boolean literal"),
})
}
}