///|
/// Token kinds emitted by the Thrift IDL lexer.
pub(all) enum TokenKind {
Identifier(String)
StringLiteral(String)
IntegerLiteral(Int64)
FloatLiteral(Double)
Symbol(Char)
End
} derive(Debug, Eq)
///|
/// One lexical token and its source location.
pub(all) struct Token {
kind : TokenKind
span : Span
} derive(Debug, Eq)
///|
pub fn Token::describe(self : Token) -> String {
match self.kind {
Identifier(value) => "identifier `\{value}`"
StringLiteral(_) => "string literal"
IntegerLiteral(value) => "integer `\{value}`"
FloatLiteral(value) => "floating-point number `\{value}`"
Symbol(value) => "`\{value}`"
End => "end of input"
}
}