code_gen/rust/control/loops/
while_loop.rs

1use crate::{CodeBuffer, Expression, Statement, WithStatements};
2
3/// A `while` loops.
4pub struct WhileLoop {
5    expression: Box<dyn Expression>,
6    statements: Vec<Box<dyn Statement>>,
7}
8
9impl<E: 'static + Expression> From<E> for WhileLoop {
10    fn from(expression: E) -> Self {
11        Self {
12            expression: Box::new(expression),
13            statements: Vec::default(),
14        }
15    }
16}
17
18impl WithStatements for WhileLoop {
19    fn statements(&self) -> &[Box<dyn Statement>] {
20        self.statements.as_slice()
21    }
22
23    fn add_boxed_statement(&mut self, statement: Box<dyn Statement>) {
24        self.statements.push(statement);
25    }
26}
27
28impl Statement for WhileLoop {
29    fn write(&self, b: &mut CodeBuffer, level: usize) {
30        b.indent(level);
31        b.write("while ");
32        self.expression.write(b);
33        b.space();
34        self.write_curly_statement_block(b, level);
35        b.end_line();
36    }
37}