iso8211/ddr/
data_descriptive_record.rs

1use std::io::{Read, Seek};
2
3use super::{DataDescriptiveField, FileControlField};
4use crate::{Directory, Leader, Reader, Result};
5
6#[derive(Debug)]
7pub struct DataDescriptiveRecord {
8    file_control_field: FileControlField,
9    data_descriptive_fields: Vec<DataDescriptiveField>,
10}
11
12impl DataDescriptiveRecord {
13    pub fn read<T: Read + Seek>(reader: &mut Reader<T>) -> Result<DataDescriptiveRecord> {
14        let leader = Leader::read_ddr(reader)?;
15
16        let directory = Directory::read(reader, &leader)?;
17
18        let entries = directory.entries();
19
20        let file_control_field = FileControlField::read(reader, &leader, &entries[0])?;
21
22        let mut data_descriptive_fields: Vec<DataDescriptiveField> =
23            Vec::with_capacity(entries.len() - 1);
24        for i in entries.iter().skip(1) {
25            let ddf = DataDescriptiveField::read(reader, i)?;
26            data_descriptive_fields.push(ddf);
27        }
28
29        Ok(DataDescriptiveRecord {
30            file_control_field,
31            data_descriptive_fields,
32        })
33    }
34
35    pub fn file_control_field(&self) -> &FileControlField {
36        &self.file_control_field
37    }
38
39    pub fn data_descriptive_fields(&self) -> &[DataDescriptiveField] {
40        &self.data_descriptive_fields
41    }
42}