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}