swash/
macros.rs

1/// Macro for consistent implementation of font resource iterators.
2macro_rules! impl_iter {
3    ($name:ident, $item:ident) => {
4        impl<'a> Iterator for $name<'a> {
5            type Item = $item<'a>;
6
7            fn size_hint(&self) -> (usize, Option<usize>) {
8                let remaining = self.len - self.pos;
9                (remaining, Some(remaining))
10            }
11
12            fn nth(&mut self, n: usize) -> Option<Self::Item> {
13                let pos = self.pos.checked_add(n)?;
14                if pos >= self.len {
15                    self.pos = self.len;
16                    None
17                } else {
18                    self.pos = pos + 1;
19                    self.get(pos)
20                }
21            }
22
23            fn next(&mut self) -> Option<Self::Item> {
24                if self.pos >= self.len {
25                    None
26                } else {
27                    let pos = self.pos;
28                    self.pos += 1;
29                    self.get(pos)
30                }
31            }
32        }
33
34        impl<'a> ExactSizeIterator for $name<'a> {
35            fn len(&self) -> usize {
36                self.len - self.pos
37            }
38        }
39    };
40}