darklua_core/nodes/expressions/
unary.rs

1use crate::nodes::{Expression, Token};
2
3#[derive(Clone, Copy, Debug, PartialEq, Eq)]
4pub enum UnaryOperator {
5    Length,
6    Minus,
7    Not,
8}
9
10impl UnaryOperator {
11    pub fn to_str(&self) -> &'static str {
12        match self {
13            Self::Length => "#",
14            Self::Minus => "-",
15            Self::Not => "not",
16        }
17    }
18}
19
20#[derive(Clone, Debug, PartialEq, Eq)]
21pub struct UnaryExpression {
22    operator: UnaryOperator,
23    expression: Expression,
24    token: Option<Token>,
25}
26
27impl UnaryExpression {
28    pub fn new<E: Into<Expression>>(operator: UnaryOperator, expression: E) -> Self {
29        Self {
30            operator,
31            expression: expression.into(),
32            token: None,
33        }
34    }
35
36    pub fn with_token(mut self, token: Token) -> Self {
37        self.token = Some(token);
38        self
39    }
40
41    #[inline]
42    pub fn set_token(&mut self, token: Token) {
43        self.token = Some(token);
44    }
45
46    #[inline]
47    pub fn get_token(&self) -> Option<&Token> {
48        self.token.as_ref()
49    }
50
51    #[inline]
52    pub fn get_expression(&self) -> &Expression {
53        &self.expression
54    }
55
56    #[inline]
57    pub fn mutate_expression(&mut self) -> &mut Expression {
58        &mut self.expression
59    }
60
61    #[inline]
62    pub fn operator(&self) -> UnaryOperator {
63        self.operator
64    }
65
66    super::impl_token_fns!(iter = [token]);
67}