1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
use crate::{field::Field, Record};
#[derive(Debug, Clone)]
pub struct Fields<'a> {
record: &'a Record<'a>,
offset: usize,
}
impl<'a> Fields<'a> {
#[doc(hidden)]
pub fn new(record: &'a Record<'a>) -> Fields<'a> {
Fields { record, offset: 0 }
}
}
impl<'a> Iterator for Fields<'a> {
type Item = Field<'a>;
fn next(&mut self) -> Option<Field<'a>> {
let i = self.offset;
self.offset += 1;
self.record.directory.entries.get(i).map(|entry| {
let offset = self.record.data_offset + entry.2;
Field::new(entry.0, &self.record.data[offset..offset + entry.1 - 1])
})
}
fn size_hint(&self) -> (usize, Option<usize>) {
let bound = self.record.directory.entries.len() - self.offset;
(bound, Some(bound))
}
}