Function parsit::test::parser_test::expect_pos_or_env
source · pub fn expect_pos_or_env<'a, Token, StepRes>(
parser: Parsit<'a, Token>,
res: Step<'a, StepRes>,
expect: usize
)where
StepRes: PartialEq + Debug,
Token: Logos<'a, Source = str> + Debug + PartialEq,
Token::Extras: Default,
Expand description
Asserts a step value with success state and the position is expected as well otherwise prints env
Example
use logos::Logos;
use parsit::test::parser_test::expect_pos_or_env;
use crate::parsit::test::parser_test::expect_pos;
use crate::parsit::test::parser_test::parsit;
use crate::parsit::token;
use crate::parsit::parser::Parsit;
use crate::parsit::step::Step;
#[derive(Logos, Debug, PartialEq)]
pub enum T<'a> {
#[regex(r"[a-zA-Z-]+")]
Word(&'a str),
#[token(",")]
Comma,
#[token(".")]
Dot,
#[token("!")]
Bang,
#[token("?")]
Question,
#[regex(r"[ \t\r\n]+", logos::skip)]
Whitespace,
}
let p = parsit("abc!");
let bang = |pos:usize| token!(p.token(pos) => T::Bang => "!");
let word = |pos:usize| token!(p.token(pos) => T::Word(v) => v);
let step =word(0).then_or_val_zip(bang, "").map(|(l,r)|format!("{}+{}+",l,r));
expect_pos_or_env(p,step,2); // the next position to parse