darklua_core/nodes/statements/
assign.rs1use crate::nodes::{Expression, Token, Variable};
2
3#[derive(Clone, Debug, PartialEq, Eq)]
4pub struct AssignTokens {
5 pub equal: Token,
6 pub variable_commas: Vec<Token>,
7 pub value_commas: Vec<Token>,
8}
9
10impl AssignTokens {
11 super::impl_token_fns!(
12 target = [equal]
13 iter = [variable_commas, value_commas]
14 );
15}
16
17#[derive(Clone, Debug, PartialEq, Eq)]
18pub struct AssignStatement {
19 variables: Vec<Variable>,
20 values: Vec<Expression>,
21 tokens: Option<AssignTokens>,
22}
23
24impl AssignStatement {
25 pub fn new(variables: Vec<Variable>, values: Vec<Expression>) -> Self {
26 Self {
27 variables,
28 values,
29 tokens: None,
30 }
31 }
32
33 pub fn from_variable<V: Into<Variable>, E: Into<Expression>>(variable: V, value: E) -> Self {
34 Self {
35 variables: vec![variable.into()],
36 values: vec![value.into()],
37 tokens: None,
38 }
39 }
40
41 #[inline]
42 pub fn variables_len(&self) -> usize {
43 self.variables.len()
44 }
45
46 #[inline]
47 pub fn values_len(&self) -> usize {
48 self.values.len()
49 }
50
51 #[inline]
52 pub fn get_variables(&self) -> &Vec<Variable> {
53 &self.variables
54 }
55
56 #[inline]
57 pub fn iter_variables(&self) -> impl Iterator<Item = &Variable> {
58 self.variables.iter()
59 }
60
61 #[inline]
62 pub fn iter_mut_variables(&mut self) -> impl Iterator<Item = &mut Variable> {
63 self.variables.iter_mut()
64 }
65
66 #[inline]
67 pub fn last_value(&self) -> Option<&Expression> {
68 self.values.last()
69 }
70
71 #[inline]
72 pub fn iter_values(&self) -> impl Iterator<Item = &Expression> {
73 self.values.iter()
74 }
75
76 #[inline]
77 pub fn iter_mut_values(&mut self) -> impl Iterator<Item = &mut Expression> {
78 self.values.iter_mut()
79 }
80
81 #[inline]
82 pub fn mutate_variables(&mut self) -> &mut Vec<Variable> {
83 &mut self.variables
84 }
85
86 pub fn append_assignment<V: Into<Variable>, E: Into<Expression>>(
87 mut self,
88 variable: V,
89 value: E,
90 ) -> Self {
91 self.variables.push(variable.into());
92 self.values.push(value.into());
93 self
94 }
95
96 pub fn with_tokens(mut self, tokens: AssignTokens) -> Self {
97 self.tokens = Some(tokens);
98 self
99 }
100
101 #[inline]
102 pub fn set_tokens(&mut self, tokens: AssignTokens) {
103 self.tokens = Some(tokens);
104 }
105
106 #[inline]
107 pub fn get_tokens(&self) -> Option<&AssignTokens> {
108 self.tokens.as_ref()
109 }
110
111 super::impl_token_fns!(iter = [tokens]);
112}