xenon_codegen/
variable_assignment.rs1use 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}