web_parser/parser/
nodes.rs1use super::Node;
2
3use std::iter::{ Iterator, Peekable };
4
5#[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}