pub enum Filter<T> {
Emit(T),
Skip,
}
Expand description
Type that can be returned from a callback, either producing a field for a token, or skipping it.
Example
use logos::{Logos, Filter};
#[derive(Logos, Debug, PartialEq)]
enum Token {
#[regex(r"[ \n\f\t]+", logos::skip)]
#[error]
Error,
#[regex("[0-9]+", |lex| {
let n: u64 = lex.slice().parse().unwrap();
// Only emit a token if `n` is an even number
match n % 2 {
0 => Filter::Emit(n),
_ => Filter::Skip,
}
})]
EvenNumber(u64)
}
let tokens: Vec<_> = Token::lexer("20 11 42 23 100 8002").collect();
assert_eq!(
tokens,
&[
Token::EvenNumber(20),
// skipping 11
Token::EvenNumber(42),
// skipping 23
Token::EvenNumber(100),
Token::EvenNumber(8002),
]
);
Variants§
Emit(T)
Emit a token with a given value T
. Use ()
for unit variants without fields.
Skip
Skip current match, analog to Skip
.