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
#[derive(PartialEq, Clone, Copy, Debug)]
pub enum Punctuator {
Default,
Or,
Neg,
GenericOpen,
GenericClose,
Colon,
SemiColon,
Dot,
Comma,
Spread,
At,
DoubleColon,
OpenBlock,
CloseBlock,
OpenParen,
CloseParen,
OpenBracket,
CloseBracket,
}
impl Punctuator {
pub fn from_str(s: &str) -> Option<Self> {
match s {
"=" => Some(Punctuator::Default),
"|" => Some(Punctuator::Or),
"-" => Some(Punctuator::Neg),
"<" => Some(Punctuator::GenericOpen),
">" => Some(Punctuator::GenericClose),
":" => Some(Punctuator::Colon),
";" => Some(Punctuator::SemiColon),
"." => Some(Punctuator::Dot),
"," => Some(Punctuator::Comma),
"..." => Some(Punctuator::Spread),
"@" => Some(Punctuator::At),
"::" => Some(Punctuator::DoubleColon),
"{" => Some(Punctuator::OpenBlock),
"}" => Some(Punctuator::CloseBlock),
"(" => Some(Punctuator::OpenParen),
")" => Some(Punctuator::CloseParen),
"[" => Some(Punctuator::OpenBracket),
"]" => Some(Punctuator::CloseBracket),
_ => None,
}
}
}