darklua_core/nodes/statements/
while_statement.rs
1use crate::nodes::{token::Token, Block, Expression};
2
3#[derive(Clone, Debug, PartialEq, Eq)]
4pub struct WhileTokens {
5 pub r#while: Token,
6 pub r#do: Token,
7 pub end: Token,
8}
9
10impl WhileTokens {
11 super::impl_token_fns!(target = [r#while, r#do, end]);
12}
13
14#[derive(Clone, Debug, PartialEq, Eq)]
15pub struct WhileStatement {
16 block: Block,
17 condition: Expression,
18 tokens: Option<WhileTokens>,
19}
20
21impl WhileStatement {
22 pub fn new<B: Into<Block>, E: Into<Expression>>(block: B, condition: E) -> Self {
23 Self {
24 block: block.into(),
25 condition: condition.into(),
26 tokens: None,
27 }
28 }
29
30 pub fn with_tokens(mut self, tokens: WhileTokens) -> Self {
31 self.tokens = Some(tokens);
32 self
33 }
34
35 #[inline]
36 pub fn get_block(&self) -> &Block {
37 &self.block
38 }
39
40 #[inline]
41 pub fn get_condition(&self) -> &Expression {
42 &self.condition
43 }
44
45 #[inline]
46 pub fn mutate_block(&mut self) -> &mut Block {
47 &mut self.block
48 }
49
50 #[inline]
51 pub fn mutate_condition(&mut self) -> &mut Expression {
52 &mut self.condition
53 }
54
55 #[inline]
56 pub fn set_tokens(&mut self, tokens: WhileTokens) {
57 self.tokens = Some(tokens);
58 }
59
60 #[inline]
61 pub fn get_tokens(&self) -> Option<&WhileTokens> {
62 self.tokens.as_ref()
63 }
64
65 #[inline]
66 pub fn mutate_tokens(&mut self) -> Option<&mut WhileTokens> {
67 self.tokens.as_mut()
68 }
69
70 super::impl_token_fns!(iter = [tokens]);
71}