use crate::{CodeBuffer, Statement};
pub trait WithStatements {
fn statements(&self) -> &[Box<dyn Statement>];
fn with_statement<S>(self, statement: S) -> Self
where
S: 'static + Statement;
fn add_statement<S>(&mut self, statement: S)
where
S: 'static + Statement;
fn write_statements(&self, b: &mut CodeBuffer, level: usize) {
for statement in self.statements() {
statement.write(b, level);
}
}
fn write_curly_statement_block(&self, b: &mut CodeBuffer, level: usize) {
if self.statements().is_empty() {
b.write("{}");
} else {
b.write("{");
b.end_line();
self.write_statements(b, level + 1);
b.indent(level);
b.write("}");
}
}
}