(context: &mut Context<'a>)
| 397 | } |
| 398 | |
| 399 | fn parse_array<'a>(context: &mut Context<'a>) -> Result<Array<'a>, ParseError> { |
| 400 | debug_assert!(context.token() == Some(Token::OpenBracket)); |
| 401 | let mut elements = Vec::new(); |
| 402 | |
| 403 | context.start_range(); |
| 404 | context.scan()?; |
| 405 | |
| 406 | loop { |
| 407 | match context.token() { |
| 408 | Some(Token::CloseBracket) => break, |
| 409 | None => return Err(context.create_error_for_current_range(ParseErrorKind::UnterminatedArray)), |
| 410 | _ => match parse_value(context)? { |
| 411 | Some(value) => elements.push(value), |
| 412 | None => return Err(context.create_error_for_current_range(ParseErrorKind::UnterminatedArray)), |
| 413 | }, |
| 414 | } |
| 415 | |
| 416 | // skip the comma |
| 417 | if let Some(Token::Comma) = context.scan()? { |
| 418 | let comma_range = context.create_range_from_last_token(); |
| 419 | if let Some(Token::CloseBracket) = context.scan()? |
| 420 | && !context.allow_trailing_commas |
| 421 | { |
| 422 | return Err(context.create_error_for_range(comma_range, ParseErrorKind::TrailingCommasNotAllowed)); |
| 423 | } |
| 424 | } |
| 425 | } |
| 426 | |
| 427 | Ok(Array { |
| 428 | range: context.end_range(), |
| 429 | elements, |
| 430 | }) |
| 431 | } |
| 432 | |
| 433 | // factory functions |
| 434 |
no test coverage detected
searching dependent graphs…