async_hdf5/messages/
attribute_info.rs1use bytes::Bytes;
2
3use crate::endian::HDF5Reader;
4use crate::error::Result;
5
6#[derive(Debug, Clone)]
10pub struct AttributeInfoMessage {
11 pub fractal_heap_address: u64,
13 pub name_btree_address: u64,
15 pub creation_order_btree_address: Option<u64>,
17 pub max_creation_index: Option<u16>,
19}
20
21impl AttributeInfoMessage {
22 pub fn parse(data: &Bytes, size_of_offsets: u8, size_of_lengths: u8) -> Result<Self> {
24 let mut r = HDF5Reader::with_sizes(data.clone(), size_of_offsets, size_of_lengths);
25
26 let _version = r.read_u8()?;
27 let flags = r.read_u8()?;
28
29 let max_creation_index = if flags & 0x01 != 0 {
30 Some(r.read_u16()?)
31 } else {
32 None
33 };
34
35 let fractal_heap_address = r.read_offset()?;
36 let name_btree_address = r.read_offset()?;
37
38 let creation_order_btree_address = if flags & 0x01 != 0 {
39 Some(r.read_offset()?)
40 } else {
41 None
42 };
43
44 Ok(Self {
45 fractal_heap_address,
46 name_btree_address,
47 creation_order_btree_address,
48 max_creation_index,
49 })
50 }
51}