twee_v3/
iter.rs

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}