microcad_lang/syntax/statement/
return_statement.rs1use microcad_lang_base::{SrcRef, SrcReferrer, TreeDisplay, TreeState};
7
8use crate::syntax::*;
9
10#[derive(Clone)]
12pub struct ReturnStatement {
13 pub keyword_ref: SrcRef,
15 pub result: Option<Expression>,
17 pub src_ref: SrcRef,
19}
20
21impl SrcReferrer for ReturnStatement {
22 fn src_ref(&self) -> SrcRef {
23 self.src_ref.clone()
24 }
25}
26
27impl std::fmt::Display for ReturnStatement {
28 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
29 if let Some(result) = &self.result {
30 write!(f, "{result}")
31 } else {
32 write!(f, microcad_lang_base::invalid_no_ansi!(RESULT))
33 }
34 }
35}
36
37impl std::fmt::Debug for ReturnStatement {
38 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
39 if let Some(result) = &self.result {
40 write!(f, "{result:?}")
41 } else {
42 write!(f, microcad_lang_base::invalid!(RESULT))
43 }
44 }
45}
46
47impl TreeDisplay for ReturnStatement {
48 fn tree_print(&self, f: &mut std::fmt::Formatter, mut depth: TreeState) -> std::fmt::Result {
49 writeln!(f, "{:depth$}ReturnStatement:", "")?;
50 depth.indent();
51 if let Some(result) = &self.result {
52 result.tree_print(f, depth)?;
53 }
54 Ok(())
55 }
56}