1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
use crate::{CodeBuffer, Statement};

/// An element with false statements. (if-else)
pub trait WithFalseStatements {
    /// Gets the false statements.
    fn false_statements(&self) -> &[Box<dyn Statement>];

    /// Adds the false statement.
    fn with_false_statement<S>(self, false_statement: S) -> Self
    where
        S: 'static + Statement;

    /// Adds the false statement.
    fn add_false_statement<S>(&mut self, false_statement: S)
    where
        S: 'static + Statement;

    /// Writes the false statements.
    fn write_false_statements(&self, b: &mut CodeBuffer, level: usize) {
        for statement in self.false_statements() {
            statement.write(b, level);
        }
    }

    /// Writes the curly-bracket false statement block.
    fn write_false_curly_statement_block(&self, b: &mut CodeBuffer, level: usize) {
        if self.false_statements().is_empty() {
            b.write("{}");
        } else {
            b.write("{");
            b.end_line();
            self.write_false_statements(b, level + 1);
            b.indent(level);
            b.write("}");
        }
    }
}