Implement a macro for iterators with multiple fields.

This commit is contained in:
Tom Alexander
2023-09-27 18:27:52 -04:00
parent d8c52568db
commit 32a7ce3f36
2 changed files with 51 additions and 0 deletions

View File

@@ -3,6 +3,7 @@ use std::marker::PhantomData;
use super::ast_node::AstNode;
use super::macros::children_iter;
use super::macros::empty_iter;
use super::macros::multi_field_iter;
use crate::types::Bold;
use crate::types::Code;
use crate::types::Document;
@@ -35,6 +36,7 @@ pub enum AstNodeIter<'r, 's> {
// Elements
Paragraph(ParagraphIter<'r, 's>),
PlainList(PlainListIter<'r, 's>),
PlainListItem(PlainListItemIter<'r, 's>),
// GreaterBlock(GreaterBlockIter<'r, 's>),
// DynamicBlock(DynamicBlockIter<'r, 's>),
// FootnoteDefinition(FootnoteDefinitionIter<'r, 's>),
@@ -154,6 +156,15 @@ children_iter!(
PlainListIter,
std::slice::Iter<'r, PlainListItem<'s>>
);
multi_field_iter!(
PlainListItem<'s>,
PlainListItemIter,
tag,
std::slice::Iter<'r, Object<'s>>,
children,
std::slice::Iter<'r, Element<'s>>
);
children_iter!(Bold<'s>, BoldIter, std::slice::Iter<'r, Object<'s>>);
children_iter!(Italic<'s>, ItalicIter, std::slice::Iter<'r, Object<'s>>);
children_iter!(