arrow_parser/
parse_operator.rs1use 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}