php_parser_rs/parser/ast/
attributes.rs

1use std::slice::Iter;
2
3use schemars::JsonSchema;
4use serde::Deserialize;
5use serde::Serialize;
6
7use crate::lexer::token::Span;
8use crate::parser::ast::arguments::ArgumentList;
9use crate::parser::ast::identifiers::SimpleIdentifier;
10
11#[derive(Debug, PartialEq, Eq, Clone, Deserialize, Serialize, JsonSchema)]
12
13pub struct Attribute {
14    pub start: Span,
15    pub end: Span,
16    pub name: SimpleIdentifier,
17    pub arguments: Option<ArgumentList>,
18}
19
20#[derive(Debug, PartialEq, Eq, Clone, Deserialize, Serialize, JsonSchema)]
21
22pub struct AttributeGroup {
23    pub start: Span,
24    pub end: Span,
25    pub members: Vec<Attribute>,
26}
27
28impl AttributeGroup {
29    pub fn iter(&self) -> Iter<'_, Attribute> {
30        self.members.iter()
31    }
32}
33
34impl IntoIterator for AttributeGroup {
35    type Item = Attribute;
36    type IntoIter = std::vec::IntoIter<Self::Item>;
37
38    fn into_iter(self) -> Self::IntoIter {
39        self.members.into_iter()
40    }
41}