iso8211/ddr/
data_descriptive_record.rs1use 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}