1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
//! Parses EXPDTA records which is a continuation type of record which may span multi-lines. //! Record contains list of `;` seperated experimental techniques. If seuccesfull returns //! [Record](../ast/types/enum.Record.html) variant containing //! [ExperimentalTechniques](../ast/types/struct.Experimental.html) //! //! # Record structure //! //! | COLUMNS | DATA TYPE | FIELD | DEFINITION | //! |---------|---------------|--------------|-------------------------------------------| //! | 1 - 6 | Record name | EXPDTA | | //! | 9 - 10 | Continuation | continuation | Allows concatenation of multiple records. | //! | 11 - 79 | SList | technique | The experimental technique(s) with | //! | | | optional comment desc | use crate::common::parser::{parse_multiline_list, FieldParser}; use crate::types::*; pub struct ExperimentalTechniquesParser; impl FieldParser for ExperimentalTechniquesParser { type Output = Vec<ExperimentalTechnique>; fn parse(inp: &str) -> nom::IResult<&str, Vec<ExperimentalTechnique>> { let (inp, techniques_as_str) = parse_multiline_list(inp)?; let techniques: Vec<ExperimentalTechnique> = techniques_as_str .into_iter() .map(|s| { s.parse::<ExperimentalTechnique>() .expect("Failed to parse experimental techniques") }) .collect(); Ok((inp, techniques)) } }