darklua_core/nodes/expressions/
unary.rs1use 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}