code_gen/common/
source.rs

1use crate::{CodeBuffer, Statement, WithStatements};
2
3/// Represents general source code.
4#[derive(Default)]
5pub struct Source {
6    statements: Vec<Box<dyn Statement>>,
7}
8
9impl From<Source> for Vec<Box<dyn Statement>> {
10    fn from(source: Source) -> Self {
11        source.statements
12    }
13}
14
15impl WithStatements for Source {
16    fn statements(&self) -> &[Box<dyn Statement>] {
17        self.statements.as_slice()
18    }
19
20    fn add_boxed_statement(&mut self, statement: Box<dyn Statement>) {
21        self.statements.push(statement)
22    }
23}
24
25impl Statement for Source {
26    fn write(&self, b: &mut CodeBuffer, level: usize) {
27        self.statements.iter().for_each(|s| s.write(b, level))
28    }
29}