From d965dd6fd1e9fb5e09a8152b56ba259c8e512a6d Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Wed, 11 Oct 2023 16:14:03 -0400 Subject: [PATCH] Implement get_additional_properties for Document. --- src/types/document.rs | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/src/types/document.rs b/src/types/document.rs index 3437586..1102261 100644 --- a/src/types/document.rs +++ b/src/types/document.rs @@ -93,8 +93,7 @@ impl<'s> Heading<'s> { } pub fn get_additional_properties(&self) -> impl Iterator> { - let foo = self - .children + self.children .iter() .take(1) .filter_map(|c| match c { @@ -107,7 +106,28 @@ impl<'s> Heading<'s> { Element::PropertyDrawer(property_drawer) => Some(property_drawer), _ => None, }) - .flat_map(|property_drawer| property_drawer.children.iter()); - foo + .flat_map(|property_drawer| property_drawer.children.iter()) + } +} + +impl<'s> Document<'s> { + pub fn get_additional_properties(&self) -> impl Iterator> { + let zeroth_section_children = self + .zeroth_section + .iter() + .flat_map(|zeroth_section| zeroth_section.children.iter()); + let property_drawer = zeroth_section_children + .take_while(|element| match element { + Element::Comment(_) => true, + Element::PropertyDrawer(_) => true, + _ => false, + }) + .find_map(|element| match element { + Element::PropertyDrawer(property_drawer) => Some(property_drawer), + _ => None, + }); + property_drawer + .into_iter() + .flat_map(|property_drawer| property_drawer.children.iter()) } }