Skip to main content

step_p21/parser/exchange/
header.rs

1use crate::{
2    ast::*,
3    parser::{combinator::*, exchange::*},
4};
5use nom::Parser;
6
7/// header_section = `HEADER;` [header_entity] [header_entity] [header_entity]
8/// \[ [header_entity_list] \] `ENDSEC;` .
9pub fn header_section(input: &str) -> ParseResult<'_, Vec<Record>> {
10    tuple_((tag_("HEADER;"), header_entity_list, tag_("ENDSEC;")))
11        .map(|(_start, entities, _close)| entities)
12        .parse(input)
13}
14
15/// header_entity_list = [header_entity] { [header_entity] } .
16pub fn header_entity_list(input: &str) -> ParseResult<'_, Vec<Record>> {
17    many1_(header_entity).parse(input)
18}
19
20/// header_entity = [simple_record] `;` .
21///
22/// Changed from the following original definition due to the duplication
23///
24/// ```text
25/// header_entity = keyword ( [ parameter_list ] ) ; .
26/// ```
27pub fn header_entity(input: &str) -> ParseResult<'_, Record> {
28    tuple_((simple_record, char_(';')))
29        .map(|(record, _semicolon)| record)
30        .parse(input)
31}