sway_parse/
punctuated.rs

1use crate::{Parse, ParseResult, ParseToEnd, Parser, ParserConsumed};
2
3use sway_ast::punctuated::Punctuated;
4
5impl<T, P> ParseToEnd for Punctuated<T, P>
6where
7    T: Parse,
8    P: Parse,
9{
10    fn parse_to_end<'a, 'e>(
11        mut parser: Parser<'a, '_>,
12    ) -> ParseResult<(Punctuated<T, P>, ParserConsumed<'a>)> {
13        let mut value_separator_pairs = Vec::new();
14        loop {
15            if let Some(consumed) = parser.check_empty() {
16                let punctuated = Punctuated {
17                    value_separator_pairs,
18                    final_value_opt: None,
19                };
20                return Ok((punctuated, consumed));
21            }
22            let value = parser.parse()?;
23            if let Some(consumed) = parser.check_empty() {
24                let punctuated = Punctuated {
25                    value_separator_pairs,
26                    final_value_opt: Some(Box::new(value)),
27                };
28                return Ok((punctuated, consumed));
29            }
30            let separator = parser.parse()?;
31            value_separator_pairs.push((value, separator));
32        }
33    }
34}