arrow_parser/
parse_operator.rs

1use crate::operator::ExprOperator;
2use crate::operator::ExprOperatorName;
3use crate::operator::EXPR_OPERATORS;
4use crate::token::TokenType;
5use lazy_static::lazy_static;
6use std::collections::HashMap;
7
8lazy_static! {
9  pub static ref BINARY_OPERATOR_MAPPING: HashMap<TokenType, &'static ExprOperator> = {
10    let mut map = HashMap::<TokenType, &'static ExprOperator>::new();
11    map.insert(
12      TokenType::Plus,
13      &EXPR_OPERATORS[&ExprOperatorName::Addition],
14    );
15    map.insert(
16      TokenType::HyphenChevronRight,
17      &EXPR_OPERATORS[&ExprOperatorName::Arrow],
18    );
19    map.insert(TokenType::KeywordAs, &EXPR_OPERATORS[&ExprOperatorName::As]);
20    map.insert(
21      TokenType::ColonColon,
22      &EXPR_OPERATORS[&ExprOperatorName::Bind],
23    );
24    map.insert(
25      TokenType::Ampersand,
26      &EXPR_OPERATORS[&ExprOperatorName::BitwiseAnd],
27    );
28    map.insert(
29      TokenType::ChevronLeftChevronLeft,
30      &EXPR_OPERATORS[&ExprOperatorName::BitwiseLeftShift],
31    );
32    map.insert(
33      TokenType::Bar,
34      &EXPR_OPERATORS[&ExprOperatorName::BitwiseOr],
35    );
36    map.insert(
37      TokenType::ChevronRightChevronRight,
38      &EXPR_OPERATORS[&ExprOperatorName::BitwiseRightShift],
39    );
40    map.insert(
41      TokenType::ChevronRightChevronRightChevronRight,
42      &EXPR_OPERATORS[&ExprOperatorName::BitwiseUnsignedRightShift],
43    );
44    map.insert(
45      TokenType::Caret,
46      &EXPR_OPERATORS[&ExprOperatorName::BitwiseXor],
47    );
48    map.insert(
49      TokenType::ParenthesisOpen,
50      &EXPR_OPERATORS[&ExprOperatorName::Call],
51    );
52    map.insert(
53      TokenType::BracketOpen,
54      &EXPR_OPERATORS[&ExprOperatorName::Index],
55    );
56    map.insert(
57      TokenType::Slash,
58      &EXPR_OPERATORS[&ExprOperatorName::Division],
59    );
60    map.insert(
61      TokenType::EqualsEquals,
62      &EXPR_OPERATORS[&ExprOperatorName::Equality],
63    );
64    map.insert(
65      TokenType::AsteriskAsterisk,
66      &EXPR_OPERATORS[&ExprOperatorName::Exponentiation],
67    );
68    map.insert(
69      TokenType::ChevronRight,
70      &EXPR_OPERATORS[&ExprOperatorName::GreaterThan],
71    );
72    map.insert(
73      TokenType::ChevronRightEquals,
74      &EXPR_OPERATORS[&ExprOperatorName::GreaterThanOrEqual],
75    );
76    map.insert(
77      TokenType::ExclamationEquals,
78      &EXPR_OPERATORS[&ExprOperatorName::Inequality],
79    );
80    map.insert(
81      TokenType::ChevronLeft,
82      &EXPR_OPERATORS[&ExprOperatorName::LessThan],
83    );
84    map.insert(
85      TokenType::ChevronLeftEquals,
86      &EXPR_OPERATORS[&ExprOperatorName::LessThanOrEqual],
87    );
88    map.insert(
89      TokenType::AmpersandAmpersand,
90      &EXPR_OPERATORS[&ExprOperatorName::LogicalAnd],
91    );
92    map.insert(
93      TokenType::BarBar,
94      &EXPR_OPERATORS[&ExprOperatorName::LogicalOr],
95    );
96    map.insert(
97      TokenType::Dot,
98      &EXPR_OPERATORS[&ExprOperatorName::MemberAccess],
99    );
100    map.insert(
101      TokenType::Asterisk,
102      &EXPR_OPERATORS[&ExprOperatorName::Multiplication],
103    );
104    map.insert(
105      TokenType::QuestionQuestion,
106      &EXPR_OPERATORS[&ExprOperatorName::OptionalCoalescing],
107    );
108    map.insert(
109      TokenType::QuestionDot,
110      &EXPR_OPERATORS[&ExprOperatorName::OptionalMemberAccess],
111    );
112    map.insert(
113      TokenType::QuestionBracketOpen,
114      &EXPR_OPERATORS[&ExprOperatorName::OptionalIndex],
115    );
116    map.insert(
117      TokenType::QuestionParenthesisOpen,
118      &EXPR_OPERATORS[&ExprOperatorName::OptionalCall],
119    );
120    map.insert(
121      TokenType::Percent,
122      &EXPR_OPERATORS[&ExprOperatorName::Remainder],
123    );
124    map.insert(
125      TokenType::Hyphen,
126      &EXPR_OPERATORS[&ExprOperatorName::Subtraction],
127    );
128    map
129  };
130  pub static ref UNARY_OPERATOR_MAPPING: HashMap<TokenType, &'static ExprOperator> = {
131    let mut map = HashMap::<TokenType, &'static ExprOperator>::new();
132    map.insert(
133      TokenType::Exclamation,
134      &EXPR_OPERATORS[&ExprOperatorName::Not],
135    );
136    map.insert(
137      TokenType::Hyphen,
138      &EXPR_OPERATORS[&ExprOperatorName::Negation],
139    );
140    map
141  };
142}