php_parser_rs/parser/ast/
identifiers.rs

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