1use nom::IResult;
2
3use crate::error::ParserError;
4use crate::lexer::{Token, TokenStream};
5
6pub fn id(i: TokenStream) -> IResult<TokenStream, String, ParserError> {
12 match i.peek() {
13 Some((Ok(Token::Id(s)), _)) => Ok((i.advance(), s)),
14 _ => Err(nom::Err::Error(ParserError::ExpectedIdentifier)),
15 }
16}
17
18pub fn var(i: TokenStream) -> IResult<TokenStream, String, ParserError> {
24 match i.peek() {
25 Some((Ok(Token::Var(s)), _)) => Ok((i.advance(), s)),
26 _ => Err(nom::Err::Error(ParserError::ExpectedIdentifier)),
27 }
28}
29
30pub fn float(i: TokenStream) -> IResult<TokenStream, f64, ParserError> {
36 match i.peek() {
37 Some((Ok(Token::Float(s)), _)) => Ok((i.advance(), s)),
38 _ => Err(nom::Err::Error(ParserError::ExpectedFloat)),
39 }
40}
41
42pub fn integer(i: TokenStream) -> IResult<TokenStream, i64, ParserError> {
48 match i.peek() {
49 Some((Ok(Token::Integer(s)), _)) => Ok((i.advance(), s)),
50 _ => Err(nom::Err::Error(ParserError::ExpectedInteger)),
51 }
52}