xenon_codegen/
return_statement.rs1use core::fmt;
2
3use crate::expression::Expression;
4
5#[derive(Debug, Clone)]
6pub struct ReturnStatement {
7 pub value: Option<Expression>,
8}
9impl Default for ReturnStatement {
10 fn default() -> Self {
11 Self::new()
12 }
13}
14
15impl ReturnStatement {
16 pub fn new() -> ReturnStatement {
17 ReturnStatement { value: None }
18 }
19
20 pub fn is_valid(&self) -> bool {
21 match self.value.clone() {
22 Some(v) => v.clone().is_valid(),
23 None => true,
24 }
25 }
26}
27impl fmt::Display for ReturnStatement {
28 fn fmt(&self, fmt: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
29 match write!(fmt, "return") {
30 Ok(_) => (),
31 Err(e) => return Err(e),
32 }
33 match self.value.clone() {
34 Some(v) => match write!(fmt, " {};", v) {
35 Ok(_) => (),
36 Err(e) => return Err(e),
37 },
38 None => match write!(fmt, ";") {
39 Ok(_) => (),
40 Err(e) => return Err(e),
41 },
42 }
43 Ok(())
44 }
45}