code_gen/rust/control/loops/
while_loop.rs1use crate::{CodeBuffer, Expression, Statement, WithStatements};
2
3pub 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}