Function parsit::test::parser_test::expect_or_env
source · pub fn expect_or_env<'a, Token, StepRes>(
parser: Parsit<'a, Token>,
res: Step<'a, StepRes>,
expect: StepRes
)where
StepRes: PartialEq + Debug,
Token: Logos<'a, Source = str> + Debug + PartialEq,
Token::Extras: Default,
Expand description
Asserts a step value with a given one otherwise prints env
Example
use logos::Logos;
use parsit::test::parser_test::expect;
use crate::parsit::test::parser_test::*;
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(|(a,b)| format!("{}{}",a,b));
expect_or_env(p,step,"abc!".to_string());