apollo_parser/lexer/
token_kind.rs

1/// Tokens generated by the lexer.
2///
3/// TokenKinds are [Lexical Tokens](https://spec.graphql.org/October2021/#sec-Appendix-Grammar-Summary.Lexical-Tokens) outlined in the GraphQL specification.
4///
5/// Punctuator
6///   # ! $ & ... , : = @ ( ) [ ] { } |
7/// Name
8/// IntValue
9/// FloatValue
10/// StringValue
11///
12/// TokenKinds can be accessed by a convenience macro, `T!`. For example to
13/// access the Bang TokenKind, you may match with `TokenKind::Bang`, or use the
14/// macro `T![!]`.
15#[derive(Debug, Clone, Copy, PartialEq, Eq)]
16#[repr(u16)]
17pub enum TokenKind {
18    Whitespace, // \r | \n |   | \t
19    Comment,    // # comment
20    Bang,       // !
21    Dollar,     // $
22    Amp,        // &
23    Spread,     // ...
24    Comma,      // ,
25    Colon,      // :
26    Eq,         // =
27    At,         // @
28    LParen,     // (
29    RParen,     // )
30    LBracket,   // [
31    RBracket,   // ]
32    LCurly,     // {
33    RCurly,     // }
34    Pipe,       // |
35    Eof,
36
37    // composite nodes
38    Name,
39    StringValue,
40    Int,
41    Float,
42}
43
44/// Create a new `TokenKind`.
45#[macro_export]
46macro_rules! T {
47    [!] => { $ crate :: TokenKind :: Bang } ;
48    [$] => { $ crate :: TokenKind :: Dollar } ;
49    [&] => { $ crate :: TokenKind :: Amp } ;
50    [...] => { $ crate :: TokenKind :: Spread } ;
51    [,] => { $ crate :: TokenKind :: Comma } ;
52    [:] => { $ crate :: TokenKind :: Colon } ;
53    [=] => { $ crate :: TokenKind :: Eq } ;
54    [@] => { $ crate :: TokenKind :: At } ;
55    ['('] => { $ crate :: TokenKind :: LParen } ;
56    [')'] => { $ crate :: TokenKind :: RParen } ;
57    ['['] => { $ crate :: TokenKind :: LBracket } ;
58    [']'] => { $ crate :: TokenKind :: RBracket } ;
59    ['{'] => { $ crate :: TokenKind :: LCurly } ;
60    ['}'] => { $ crate :: TokenKind :: RCurly } ;
61    [|] => { $ crate :: TokenKind :: Pipe } ;
62
63    // composite nodes
64    [name] => { $ crate :: TokenKind :: Name } ;
65    [string] => { $ crate :: TokenKind :: StringValue} ;
66    [int] => { $ crate :: TokenKind :: Int} ;
67    [float] => { $ crate :: TokenKind :: Float} ;
68}