xenon_codegen/
switch_statement.rs1use core::fmt;
2
3use crate::{case::Case, expression::Expression};
4
5#[derive(Debug, Clone, Default)]
6pub struct SwitchStatement {
7 pub condition: Expression,
8 pub cases: Vec<Case>,
9}
10impl SwitchStatement {
11 pub fn new(condition: Expression) -> SwitchStatement {
12 SwitchStatement {
13 condition,
14 cases: vec![],
15 }
16 }
17
18 pub fn is_valid(&self) -> bool {
19 if !self.condition.is_valid() {
20 return false;
21 }
22
23 for i in 0..self.cases.len() {
24 if !self.cases[i].is_valid() {
25 return false;
26 }
27 }
28 true
29 }
30}
31impl fmt::Display for SwitchStatement {
32 fn fmt(&self, fmt: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
33 match writeln!(fmt, "switch ({}) {{", self.condition) {
34 Ok(_) => (),
35 Err(e) => return Err(e),
36 }
37 for i in 0..self.cases.len() {
38 match write!(fmt, "{}", self.cases[i]) {
39 Ok(_) => (),
40 Err(e) => return Err(e),
41 }
42 }
43 match write!(fmt, "}}") {
44 Ok(_) => (),
45 Err(e) => return Err(e),
46 }
47
48 Ok(())
49 }
50}