diff options
| author | Philipp A | 2018-12-02 12:37:31 +0100 |
|---|---|---|
| committer | Philipp A | 2018-12-02 12:37:31 +0100 |
| commit | fad2dff1c719470a4ed8542b05a210056de6949a (patch) | |
| tree | 69142a504f085e6350e071a4c2d35a7b0e7e3b73 /src/parser/conversion.rs | |
| parent | 30f5d8b4a22c189bc8a4b24e9cf2bb4907ef191b (diff) | |
| download | rust-rst-fad2dff1c719470a4ed8542b05a210056de6949a.tar.bz2 | |
Switched url to target
Diffstat (limited to 'src/parser/conversion.rs')
| -rw-r--r-- | src/parser/conversion.rs | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/src/parser/conversion.rs b/src/parser/conversion.rs index 0288c4c..6d10744 100644 --- a/src/parser/conversion.rs +++ b/src/parser/conversion.rs @@ -37,22 +37,25 @@ impl<'l, R> PairExt<R> for Pair<'l, R> where R: pest::RuleType { pub fn convert_document(pairs: Pairs<Rule>) -> Result<e::Document, Error> { - let structural_elems = pairs.map(convert_ssubel).collect::<Result<_,_>>()?; + let structural_elems = pairs.map(convert_ssubel) + .filter_map(|elem| match elem { Ok(Some(e)) => Some(Ok(e)), Err(e) => Some(Err(e)), Ok(None) => None }) + .collect::<Result<_,_>>()?; Ok(e::Document::with_children(structural_elems)) } -fn convert_ssubel(pair: Pair<Rule>) -> Result<c::StructuralSubElement, Error> { +fn convert_ssubel(pair: Pair<Rule>) -> Result<Option<c::StructuralSubElement>, Error> { // TODO: This is just a proof of concep. Keep closely to DTD in final version! - match pair.as_rule() { - Rule::title => Ok(convert_title(pair).into()), - Rule::paragraph => Ok(e::Paragraph::with_children(vec![pair.as_str().into()]).into()), - Rule::target => Ok(convert_target(pair)?.into()), - Rule::substitution_def => Ok(convert_substitution_def(pair)?.into()), - Rule::admonition_gen => Ok(convert_admonition_gen(pair)?.into()), - Rule::image => Ok(convert_image::<e::Image>(pair)?.into()), - rule => Err(ConversionError::UnknownRuleError { rule }.into()), - } + Ok(Some(match pair.as_rule() { + Rule::title => convert_title(pair).into(), + Rule::paragraph => e::Paragraph::with_children(vec![pair.as_str().into()]).into(), + Rule::target => convert_target(pair)?.into(), + Rule::substitution_def => convert_substitution_def(pair)?.into(), + Rule::admonition_gen => convert_admonition_gen(pair)?.into(), + Rule::image => convert_image::<e::Image>(pair)?.into(), + Rule::EOI => return Ok(None), + rule => return Err(ConversionError::UnknownRuleError { rule }.into()), + })) } |
