php_parser_rs/parser/ast/
identifiers.rs1use std::fmt::Display;
2
3use schemars::JsonSchema;
4use serde::Deserialize;
5use serde::Serialize;
6
7use crate::lexer::byte_string::ByteString;
8use crate::lexer::token::Span;
9use crate::node::Node;
10use crate::parser::ast::Expression;
11
12#[derive(Debug, PartialEq, Eq, Clone, Deserialize, Serialize, JsonSchema)]
13#[serde(tag = "type", content = "value")]
14pub enum Identifier {
15 SimpleIdentifier(SimpleIdentifier),
16 DynamicIdentifier(DynamicIdentifier),
17}
18
19impl Node for Identifier {
20 fn children(&mut self) -> Vec<&mut dyn Node> {
21 match self {
22 Identifier::SimpleIdentifier(identifier) => identifier.children(),
23 Identifier::DynamicIdentifier(identifier) => identifier.children(),
24 }
25 }
26}
27
28#[derive(Debug, PartialEq, Eq, Clone, Deserialize, Serialize, JsonSchema)]
29
30pub struct SimpleIdentifier {
31 pub span: Span,
32 pub value: ByteString,
33}
34
35impl Node for SimpleIdentifier {
36 }
38
39impl Display for SimpleIdentifier {
40 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
41 write!(f, "{}", self.value)
42 }
43}
44
45#[derive(Debug, PartialEq, Eq, Clone, Deserialize, Serialize, JsonSchema)]
46
47pub struct DynamicIdentifier {
48 pub start: Span,
49 pub expr: Box<Expression>,
50 pub end: Span,
51}
52
53impl Node for DynamicIdentifier {
54 fn children(&mut self) -> Vec<&mut dyn Node> {
55 vec![self.expr.as_mut()]
56 }
57}