php_parser_rs/parser/ast/
namespaces.rs1use schemars::JsonSchema;
2use serde::Deserialize;
3use serde::Serialize;
4
5use crate::lexer::token::Span;
6use crate::node::Node;
7use crate::parser::ast::identifiers::SimpleIdentifier;
8use crate::parser::ast::Statement;
9
10#[derive(Debug, PartialEq, Eq, Clone, Deserialize, Serialize, JsonSchema)]
11
12pub struct UnbracedNamespace {
13 pub start: Span, pub name: SimpleIdentifier, pub end: Span, pub statements: Vec<Statement>, }
18
19impl Node for UnbracedNamespace {
20 fn children(&mut self) -> Vec<&mut dyn Node> {
21 let mut children = vec![&mut self.name as &mut dyn Node];
22 children.extend(
23 self.statements
24 .iter_mut()
25 .map(|s| s as &mut dyn Node)
26 .collect::<Vec<&mut dyn Node>>(),
27 );
28 children
29 }
30}
31
32#[derive(Debug, PartialEq, Eq, Clone, Deserialize, Serialize, JsonSchema)]
33
34pub struct BracedNamespace {
35 pub namespace: Span, pub name: Option<SimpleIdentifier>, pub body: BracedNamespaceBody, }
39
40impl Node for BracedNamespace {
41 fn children(&mut self) -> Vec<&mut dyn Node> {
42 let mut children: Vec<&mut dyn Node> = vec![];
43 if let Some(name) = &mut self.name {
44 children.push(name);
45 }
46 children.push(&mut self.body);
47 children
48 }
49}
50
51#[derive(Debug, PartialEq, Eq, Clone, Deserialize, Serialize, JsonSchema)]
52
53pub struct BracedNamespaceBody {
54 pub start: Span, pub end: Span, pub statements: Vec<Statement>, }
58
59impl Node for BracedNamespaceBody {
60 fn children(&mut self) -> Vec<&mut dyn Node> {
61 self.statements
62 .iter_mut()
63 .map(|s| s as &mut dyn Node)
64 .collect()
65 }
66}
67
68#[derive(Debug, PartialEq, Eq, Clone, Deserialize, Serialize, JsonSchema)]
69#[serde(tag = "type", content = "value")]
70pub enum NamespaceStatement {
71 Unbraced(UnbracedNamespace), Braced(BracedNamespace), }
74
75impl Node for NamespaceStatement {
76 fn children(&mut self) -> Vec<&mut dyn Node> {
77 match self {
78 NamespaceStatement::Unbraced(namespace) => vec![namespace],
79 NamespaceStatement::Braced(namespace) => vec![namespace],
80 }
81 }
82}