1use crate::SyntaxKind::{self, *};
2
3#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
4pub enum BinOpKind {
5 Concat,
6 Update,
7
8 Add,
9 Sub,
10 Mul,
11 Div,
12
13 And,
14 Equal,
15 Implication,
16 Less,
17 LessOrEq,
18 More,
19 MoreOrEq,
20 NotEqual,
21 Or,
22}
23
24impl BinOpKind {
25 pub fn from_kind(token: SyntaxKind) -> Option<Self> {
27 match token {
28 TOKEN_CONCAT => Some(BinOpKind::Concat),
29 TOKEN_UPDATE => Some(BinOpKind::Update),
30
31 TOKEN_ADD => Some(BinOpKind::Add),
32 TOKEN_SUB => Some(BinOpKind::Sub),
33 TOKEN_MUL => Some(BinOpKind::Mul),
34 TOKEN_DIV => Some(BinOpKind::Div),
35
36 TOKEN_AND_AND => Some(BinOpKind::And),
37 TOKEN_EQUAL => Some(BinOpKind::Equal),
38 TOKEN_IMPLICATION => Some(BinOpKind::Implication),
39 TOKEN_LESS => Some(BinOpKind::Less),
40 TOKEN_LESS_OR_EQ => Some(BinOpKind::LessOrEq),
41 TOKEN_MORE => Some(BinOpKind::More),
42 TOKEN_MORE_OR_EQ => Some(BinOpKind::MoreOrEq),
43 TOKEN_NOT_EQUAL => Some(BinOpKind::NotEqual),
44 TOKEN_OR_OR => Some(BinOpKind::Or),
45
46 _ => None,
47 }
48 }
49}
50
51#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
52pub enum UnaryOpKind {
53 Invert,
54 Negate,
55}
56
57impl UnaryOpKind {
58 pub fn from_kind(kind: SyntaxKind) -> Option<Self> {
60 match kind {
61 TOKEN_INVERT => Some(UnaryOpKind::Invert),
62 TOKEN_SUB => Some(UnaryOpKind::Negate),
63 _ => None,
64 }
65 }
66}