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)]
Ignored,
#[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,
&[
Ok(Token::EvenNumber(20)),
// skipping 11
Ok(Token::EvenNumber(42)),
// skipping 23
Ok(Token::EvenNumber(100)),
Ok(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
.
Auto Trait Implementations§
impl<T> Freeze for Filter<T>where
T: Freeze,
impl<T> RefUnwindSafe for Filter<T>where
T: RefUnwindSafe,
impl<T> Send for Filter<T>where
T: Send,
impl<T> Sync for Filter<T>where
T: Sync,
impl<T> Unpin for Filter<T>where
T: Unpin,
impl<T> UnwindSafe for Filter<T>where
T: UnwindSafe,
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more