php_parser_rs/parser/ast/
utils.rs1use std::slice::Iter;
2use std::slice::IterMut;
3
4use schemars::JsonSchema;
5use serde::Deserialize;
6use serde::Serialize;
7
8use crate::lexer::token::Span;
9use crate::node::Node;
10
11#[derive(Debug, PartialEq, Eq, Clone, Deserialize, Serialize, JsonSchema)]
12
13pub struct CommaSeparated<T> {
14 pub inner: Vec<T>,
15 pub commas: Vec<Span>, }
17
18impl<T> CommaSeparated<T> {
19 pub fn iter(&self) -> Iter<'_, T> {
20 self.inner.iter()
21 }
22
23 pub fn iter_mut(&mut self) -> IterMut<'_, T> {
24 self.inner.iter_mut()
25 }
26}
27
28impl<T: Node> Node for CommaSeparated<T> {
29 fn children(&mut self) -> Vec<&mut dyn Node> {
30 self.inner.iter_mut().map(|x| x as &mut dyn Node).collect()
31 }
32}
33
34impl<T> IntoIterator for CommaSeparated<T> {
35 type Item = T;
36 type IntoIter = std::vec::IntoIter<Self::Item>;
37
38 fn into_iter(self) -> Self::IntoIter {
39 self.inner.into_iter()
40 }
41}