xenon_codegen/
variable_assignment.rs

1use core::fmt;
2
3use crate::{expression::Expression, identifier::IdentifierAccess};
4
5#[derive(Debug, Clone, Default)]
6pub struct VariableAssignment {
7    pub name: IdentifierAccess,
8    pub operator: String,
9    pub value: Expression,
10}
11impl VariableAssignment {
12    pub fn new(name: IdentifierAccess, op: String, value: Expression) -> VariableAssignment {
13        VariableAssignment {
14            name,
15            operator: op,
16            value,
17        }
18    }
19
20    pub fn is_valid(&self) -> bool {
21        if !self.name.is_valid() {
22            return false;
23        }
24        if !["=", "+=", "-=", "*=", "/="].contains(&self.operator.as_str()) {
25            return false;
26        }
27        if !self.value.is_valid() {
28            return false;
29        }
30        true
31    }
32}
33impl fmt::Display for VariableAssignment {
34    fn fmt(&self, fmt: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
35        match write!(fmt, "{} {} {}", self.name, self.operator, self.value) {
36            Ok(_) => (),
37            Err(e) => return Err(e),
38        }
39        Ok(())
40    }
41}