microcad_lang/syntax/
body.rs1use derive_more::Deref;
7use microcad_lang_base::{SrcRef, SrcReferrer, TreeDisplay, TreeState};
8
9use crate::syntax::*;
10
11#[derive(Clone, Default, Deref)]
13pub struct Body {
14 #[deref]
16 pub statements: StatementList,
17 pub src_ref: SrcRef,
19}
20
21impl SrcReferrer for Body {
22 fn src_ref(&self) -> SrcRef {
23 self.src_ref.clone()
24 }
25}
26
27impl std::fmt::Display for Body {
28 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
29 writeln!(f, " {{")?;
30 writeln!(f, "{}", self.statements)?;
31 writeln!(f, "}}")?;
32 Ok(())
33 }
34}
35
36impl std::fmt::Debug for Body {
37 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
38 writeln!(f, " {{")?;
39 writeln!(f, "{:?}", self.statements)?;
40 writeln!(f, "}}")?;
41 Ok(())
42 }
43}
44
45impl TreeDisplay for Body {
46 fn tree_print(&self, f: &mut std::fmt::Formatter, mut depth: TreeState) -> std::fmt::Result {
47 writeln!(f, "{:depth$}Body:", "")?;
48 depth.indent();
49 self.statements
50 .iter()
51 .try_for_each(|s| s.tree_print(f, depth))
52 }
53}