1use crate::ContentNode;
2
3pub struct LinkIterator<'a, T> {
4 nodes: &'a [ContentNode<T>],
5}
6
7impl<'a, T> LinkIterator<'a, T> {
8 pub fn new(nodes: &'a [ContentNode<T>]) -> Self {
9 Self { nodes }
10 }
11}
12
13impl<'a, T> Iterator for LinkIterator<'a, T> {
14 type Item = Link<'a, T>;
15
16 fn next(&mut self) -> Option<Self::Item> {
17 let link;
18 loop {
19 if self.nodes.is_empty() {
20 return None;
21 }
22 let node = &self.nodes[0];
23 if let ContentNode::Link { text, target } = node {
24 link = Some(Link { text, target });
25 break;
26 }
27 self.nodes = &self.nodes[1..];
28 }
29 self.nodes = &self.nodes[1..];
30 link
31 }
32}
33
34pub struct Link<'a, T> {
35 pub text: &'a T,
36 pub target: &'a T,
37}