web_parser/parser/
nodes.rs

1use super::Node;
2
3use std::iter::{ Iterator, Peekable };
4
5/// The HTML nodes iterator
6#[derive(Debug, Clone)]
7pub struct Nodes<'a, 'b> {
8    iter_from_doc: Option<Peekable<scraper::html::Select<'a, 'b>>>,
9    iter_from_node: Option<Peekable<scraper::element_ref::Select<'a, 'b>>>,
10}
11
12impl<'a, 'b> Nodes<'a, 'b> {
13    pub(crate) fn new(iter_from_doc: Option<Peekable<scraper::html::Select<'a, 'b>>>, iter_from_node: Option<Peekable<scraper::element_ref::Select<'a, 'b>>>) -> Self {
14        Self {
15            iter_from_doc,
16            iter_from_node
17        }
18    }
19}
20
21impl<'a, 'b> Iterator for Nodes<'a, 'b> {
22    type Item = Node<'a>;
23
24    fn next(&mut self) -> Option<Self::Item> {
25        if let Some(iter) = self.iter_from_doc.as_mut() {
26            if let Some(item) = iter.next() {
27                return Some(Node::new(item));
28            }
29        }
30
31        else if let Some(iter) = self.iter_from_node.as_mut() {
32            if let Some(item) = iter.next() {
33                return Some(Node::new(item));
34            }
35        }
36
37        None
38    }
39}