mago_ast/ast/
assignment.rs

1use serde::Deserialize;
2use serde::Serialize;
3use strum::Display;
4
5use mago_span::HasSpan;
6use mago_span::Span;
7
8use crate::ast::expression::Expression;
9
10/// Represents a PHP assignment operator.
11#[derive(Debug, Clone, Eq, PartialEq, Hash, Serialize, Deserialize, PartialOrd, Ord, Display)]
12#[serde(tag = "type", content = "value")]
13#[repr(C, u8)]
14pub enum AssignmentOperator {
15    Assign(Span),
16    Addition(Span),
17    Subtraction(Span),
18    Multiplication(Span),
19    Division(Span),
20    Modulo(Span),
21    Exponentiation(Span),
22    Concat(Span),
23    BitwiseAnd(Span),
24    BitwiseOr(Span),
25    BitwiseXor(Span),
26    LeftShift(Span),
27    RightShift(Span),
28    Coalesce(Span),
29}
30
31/// Represents a PHP assignment operation
32#[derive(Debug, Clone, Eq, PartialEq, Hash, Serialize, Deserialize, PartialOrd, Ord)]
33#[repr(C)]
34pub struct Assignment {
35    pub lhs: Box<Expression>,
36    pub operator: AssignmentOperator,
37    pub rhs: Box<Expression>,
38}
39
40impl HasSpan for AssignmentOperator {
41    fn span(&self) -> Span {
42        match self {
43            Self::Assign(span) => *span,
44            Self::Addition(span) => *span,
45            Self::Subtraction(span) => *span,
46            Self::Multiplication(span) => *span,
47            Self::Division(span) => *span,
48            Self::Modulo(span) => *span,
49            Self::Exponentiation(span) => *span,
50            Self::Concat(span) => *span,
51            Self::BitwiseAnd(span) => *span,
52            Self::BitwiseOr(span) => *span,
53            Self::BitwiseXor(span) => *span,
54            Self::LeftShift(span) => *span,
55            Self::RightShift(span) => *span,
56            Self::Coalesce(span) => *span,
57        }
58    }
59}
60
61impl HasSpan for Assignment {
62    fn span(&self) -> Span {
63        self.lhs.span().join(self.rhs.span())
64    }
65}