---
source: logos-cli/tests/tests.rs
expression: output
---
# [derive (Debug , Clone , Copy , PartialEq)] enum Token { Letter , }impl < 's > :: logos :: Logos < 's > for Token { type Error = () ; type Extras = () ; type Source = str ; fn lex (lex : & mut :: logos :: Lexer < 's , Self >) -> std :: option :: Option < std :: result :: Result < Self , < Self as :: logos :: Logos < 's >> :: Error >> { use :: logos :: internal :: { LexerInternal , CallbackRetVal , CallbackResult , SkipRetVal , SkipResult , } ; use std :: result :: Result as _Result ; use std :: option :: Option as _Option ; use :: logos :: Logos ; type _Lexer < 's > = :: logos :: Lexer < 's , Token > ; macro_rules ! _fast_loop { ($ lex : ident , $ test : ident , $ offset : ident) => { 'fast_loop : { while let Some (arr) = $ lex . read :: < & [u8 ; 8usize] > ($ offset) { if $ test (arr [0usize]) { $ offset += 0usize ; break 'fast_loop ; } if $ test (arr [1usize]) { $ offset += 1usize ; break 'fast_loop ; } if $ test (arr [2usize]) { $ offset += 2usize ; break 'fast_loop ; } if $ test (arr [3usize]) { $ offset += 3usize ; break 'fast_loop ; } if $ test (arr [4usize]) { $ offset += 4usize ; break 'fast_loop ; } if $ test (arr [5usize]) { $ offset += 5usize ; break 'fast_loop ; } if $ test (arr [6usize]) { $ offset += 6usize ; break 'fast_loop ; } if $ test (arr [7usize]) { $ offset += 7usize ; break 'fast_loop ; } $ offset += 8usize ; } while let Some (byte) = $ lex . read :: < u8 > ($ offset) { if $ test (byte) { break 'fast_loop ; } $ offset += 1 ; } } } ; } macro_rules ! _take_action { ($ lex : ident , $ offset : ident , $ context : ident , $ state : ident) => { { let action = _get_action ($ lex , $ offset , $ context) ; match action { CallbackResult :: Emit (tok) => { return Some (Ok (tok)) ; } , CallbackResult :: Skip => { $ lex . trivia () ; $ offset = $ lex . offset () ; $ context = None ; $ state = LogosState :: State0 ; continue ; } , CallbackResult :: Error (err) => { return Some (Err (err)) ; } , CallbackResult :: DefaultError => { return Some (Err (_make_error ($ lex))) ; } , } } } } # [inline] fn _make_error < 's > (lex : & mut _Lexer < 's >) -> < Token as Logos < 's >> :: Error { < Token as Logos < 's >> :: Error :: default () } # [inline] fn _get_action < 's > (lex : & mut _Lexer < 's > , offset : usize , context : _Option < LogosLeaf >) -> CallbackResult < 's , Token > { match context { None => { lex . end_to_boundary (offset . max (lex . offset () + 1)) ; CallbackResult :: Error (_make_error (lex)) } , Some (LogosLeaf :: Leaf0) => { CallbackResult :: Emit (Token :: Letter) } } } # [derive (Clone , Copy)] enum LogosLeaf { Leaf0 = 0isize } # [derive (Clone , Copy)] enum LogosState { State0 , State1 , State2 , State3 } let mut state = LogosState :: State0 ; let mut offset = lex . offset () ; let mut context : _Option < LogosLeaf > = None ; loop { match state { LogosState :: State0 => { let other = lex . read :: < u8 > (offset) ; if let Some (byte) = other { if (byte == b'a') { offset += 1 ; state = LogosState :: State3 ; continue ; } } else { if lex . offset () == offset { return None } } _take_action ! (lex , offset , context , state) } LogosState :: State1 => { let other = lex . read :: < u8 > (offset) ; if let Some (byte) = other { if (byte == b'z') { offset += 1 ; state = LogosState :: State2 ; continue ; } } else { } _take_action ! (lex , offset , context , state) } LogosState :: State2 => { lex . end (offset) ; context = Some (LogosLeaf :: Leaf0) ; let other = lex . read :: < u8 > (offset) ; if let Some (byte) = other { } else { } _take_action ! (lex , offset , context , state) } LogosState :: State3 => { let other = lex . read :: < u8 > (offset) ; if let Some (byte) = other { if (byte == b'-') { offset += 1 ; state = LogosState :: State1 ; continue ; } } else { } _take_action ! (lex , offset , context , state) } } } } }
