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