#![allow(clippy::identity_op, clippy::just_underscores_and_digits)]
use core::fmt;
#[derive(Debug, Clone, Copy)]
#[repr(u8)]
pub enum Token {
Comma = 0b0000_0000 | CTL_BIT,
Colon = 0b0001_0000 | CTL_BIT,
Whitespace = 0b0000_0000,
OpenBrace = 0b0001_0000 | VAL_BIT,
CloseBrace = 0b0010_0000,
OpenBracket = 0b0011_0000 | VAL_BIT,
CloseBracket = 0b0100_0000,
String = 0b0111_0000 | VAL_BIT,
Number = 0b0101_0000 | VAL_BIT,
Null = 0b1000_0000 | VAL_BIT,
True = 0b1001_0000 | VAL_BIT,
False = 0b1010_0000 | VAL_BIT,
Error = 0b1111_0000 | CTL_BIT,
Eof = 0b1110_0000 | CTL_BIT,
}
impl Token {
#[inline]
pub(crate) fn from_byte(b: u8) -> Token {
MAP[b as usize]
}
#[inline]
pub(crate) fn is_value(&self) -> bool {
(*self as u8) & VAL_BIT != 0
}
#[inline]
pub(crate) fn is_null(&self) -> bool {
matches!(self, Token::Null)
}
}
impl fmt::Display for Token {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Token::Comma => write!(f, "`,`"),
Token::Colon => write!(f, "`:`"),
Token::Whitespace => write!(f, "<whitespace>"),
Token::OpenBrace => write!(f, "`{{`"),
Token::CloseBrace => write!(f, "`}}`"),
Token::OpenBracket => write!(f, "`[`"),
Token::CloseBracket => write!(f, "`]`"),
Token::String => write!(f, "`\"`"),
Token::Number => write!(f, "<number>"),
Token::Null => write!(f, "null"),
Token::True => write!(f, "true"),
Token::False => write!(f, "false"),
Token::Error => write!(f, "<error>"),
Token::Eof => write!(f, "<eof>"),
}
}
}
const VAL_BIT: u8 = 0b0000_0001;
const CTL_BIT: u8 = 0b0000_0010;
const WS: Token = Token::Whitespace;
const OA: Token = Token::OpenBrace;
const CA: Token = Token::CloseBrace;
const OB: Token = Token::OpenBracket;
const CB: Token = Token::CloseBracket;
const NM: Token = Token::Number;
const ST: Token = Token::String;
const NU: Token = Token::Null;
const TR: Token = Token::True;
const FL: Token = Token::False;
const CM: Token = Token::Comma;
const CL: Token = Token::Colon;
const __: Token = Token::Error;
static MAP: [Token; 256] = [
__, __, __, __, __, __, __, __, __, WS, WS, __, WS, WS, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, WS, __, ST, __, __, __, __, __, __, __, __, __, CM, NM, __, __, NM, NM, NM, NM, NM, NM, NM, NM, NM, NM, CL, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, OB, __, CB, __, __, __, __, __, __, __, __, FL, __, __, __, __, __, __, __, NU, __, __, __, __, __, TR, __, __, __, __, __, __, OA, __, CA, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, ];