1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
use core::RpNumber;
use std::borrow::Cow;
#[derive(Clone, Debug, PartialEq)]
pub enum Token<'input> {
Identifier(Cow<'input, str>),
TypeIdentifier(Cow<'input, str>),
PackageDocComment(Vec<Cow<'input, str>>),
DocComment(Vec<Cow<'input, str>>),
Number(RpNumber),
LeftCurly,
RightCurly,
LeftBracket,
RightBracket,
LeftParen,
RightParen,
SemiColon,
Colon,
Equal,
Comma,
Dot,
Scope,
QuestionMark,
Hash,
Bang,
RightArrow,
CodeOpen,
CodeClose,
CodeContent(Cow<'input, str>),
String(String),
InterfaceKeyword,
TypeKeyword,
EnumKeyword,
TupleKeyword,
ServiceKeyword,
UseKeyword,
AsKeyword,
AnyKeyword,
FloatKeyword,
DoubleKeyword,
Signed32,
Signed64,
Unsigned32,
Unsigned64,
BooleanKeyword,
StringKeyword,
DateTimeKeyword,
BytesKeyword,
StreamKeyword,
}
impl<'input> Token<'input> {
pub fn keyword_safe(&self) -> Option<&'static str> {
let out = match *self {
Token::AnyKeyword => "_any",
Token::InterfaceKeyword => "_interface",
Token::TypeKeyword => "_type",
Token::EnumKeyword => "_enum",
Token::TupleKeyword => "_tuple",
Token::ServiceKeyword => "_service",
Token::UseKeyword => "_use",
Token::AsKeyword => "_as",
Token::FloatKeyword => "_float",
Token::DoubleKeyword => "_double",
Token::Signed32 => "_i32",
Token::Signed64 => "_i64",
Token::Unsigned32 => "_u32",
Token::Unsigned64 => "_u64",
Token::BooleanKeyword => "_boolean",
Token::StringKeyword => "_string",
Token::DateTimeKeyword => "_datetime",
Token::BytesKeyword => "_bytes",
Token::StreamKeyword => "_stream",
_ => return None,
};
Some(out)
}
}