Enum logos::FilterResult
source · pub enum FilterResult<T> {
Emit(T),
Skip,
Error,
}
Expand description
Type that can be returned from a callback, either producing a field for a token, skipping it, or emitting an error.
Example
use logos::{Logos, FilterResult};
#[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.
if n % 2 == 0 {
// Emit an error if `n` is 10.
if n == 10 {
FilterResult::Error
} else {
FilterResult::Emit(n)
}
} else {
FilterResult::Skip
}
})]
NiceEvenNumber(u64)
}
let tokens: Vec<_> = Token::lexer("20 11 42 23 100 10").collect();
assert_eq!(
tokens,
&[
Token::NiceEvenNumber(20),
// skipping 11
Token::NiceEvenNumber(42),
// skipping 23
Token::NiceEvenNumber(100),
// error at 10
Token::Error,
]
);
Variants§
Emit(T)
Emit a token with a given value T
. Use ()
for unit variants without fields.
Skip
Skip current match, analog to Skip
.
Error
Emit a <Token as Logos>::ERROR
token.