xenon_codegen/
return_statement.rs

1use 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}