darklua_core/nodes/expressions/
index.rs

1use crate::nodes::{Expression, Prefix, Token};
2
3#[derive(Clone, Debug, PartialEq, Eq)]
4pub struct IndexExpressionTokens {
5    pub opening_bracket: Token,
6    pub closing_bracket: Token,
7}
8
9impl IndexExpressionTokens {
10    super::impl_token_fns!(target = [opening_bracket, closing_bracket]);
11}
12
13#[derive(Clone, Debug, PartialEq, Eq)]
14pub struct IndexExpression {
15    prefix: Prefix,
16    index: Expression,
17    tokens: Option<IndexExpressionTokens>,
18}
19
20impl IndexExpression {
21    pub fn new<P: Into<Prefix>, E: Into<Expression>>(prefix: P, expression: E) -> Self {
22        Self {
23            prefix: prefix.into(),
24            index: expression.into(),
25            tokens: None,
26        }
27    }
28
29    pub fn with_tokens(mut self, tokens: IndexExpressionTokens) -> Self {
30        self.tokens = Some(tokens);
31        self
32    }
33
34    #[inline]
35    pub fn set_tokens(&mut self, tokens: IndexExpressionTokens) {
36        self.tokens = Some(tokens);
37    }
38
39    #[inline]
40    pub fn get_tokens(&self) -> Option<&IndexExpressionTokens> {
41        self.tokens.as_ref()
42    }
43
44    #[inline]
45    pub fn get_prefix(&self) -> &Prefix {
46        &self.prefix
47    }
48
49    #[inline]
50    pub fn get_index(&self) -> &Expression {
51        &self.index
52    }
53
54    #[inline]
55    pub fn mutate_prefix(&mut self) -> &mut Prefix {
56        &mut self.prefix
57    }
58
59    #[inline]
60    pub fn mutate_index(&mut self) -> &mut Expression {
61        &mut self.index
62    }
63
64    super::impl_token_fns!(iter = [tokens]);
65}