rnix/ast/
operators.rs

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    /// Get the operation kind from a SyntaxKind in the AST
26    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    /// Get the operation kind from a token in the AST
59    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}