pub struct AttributeMessage {
pub name: String,
pub datatype: DatatypeMessage,
pub dataspace: DataspaceMessage,
pub data: Vec<u8>,
}Expand description
An HDF5 attribute message.
Fields§
§name: StringAttribute name.
datatype: DatatypeMessageDatatype of the attribute value.
dataspace: DataspaceMessageDataspace (scalar or simple).
data: Vec<u8>Raw attribute value data.
Implementations§
Source§impl AttributeMessage
impl AttributeMessage
Sourcepub fn scalar_string(name: &str, value: &str) -> Self
pub fn scalar_string(name: &str, value: &str) -> Self
Create a scalar string attribute with the given name and value.
Uses a null-terminated UTF-8 fixed-length string datatype with size = value.len() + 1 (for the null terminator), and a scalar dataspace.
Sourcepub fn scalar_numeric(
name: &str,
datatype: DatatypeMessage,
data: Vec<u8>,
) -> Self
pub fn scalar_numeric( name: &str, datatype: DatatypeMessage, data: Vec<u8>, ) -> Self
Create a scalar numeric attribute with raw bytes as value.
Sourcepub fn array_numeric(
name: &str,
datatype: DatatypeMessage,
dims: &[u64],
data: Vec<u8>,
) -> Self
pub fn array_numeric( name: &str, datatype: DatatypeMessage, dims: &[u64], data: Vec<u8>, ) -> Self
Create a numeric array attribute with a simple dataspace.
dims are the dimension sizes (e.g. &[3] for the 1-D array
attributes AreaDetector writes). data is the row-major raw bytes and
must hold product(dims) * datatype.element_size() bytes — the caller
owns that invariant. An empty dims yields a scalar dataspace; prefer
Self::scalar_numeric for that case.
Sourcepub fn encode(&self, ctx: &FormatContext) -> Vec<u8> ⓘ
pub fn encode(&self, ctx: &FormatContext) -> Vec<u8> ⓘ
Encode the attribute message into a byte vector.
The result is the raw payload for an object header message of type 0x0C (MSG_ATTRIBUTE). It does NOT include the object header message envelope (type, size, flags bytes); that is handled by the caller.
Sourcepub fn encode_at(&self, ctx: &FormatContext, libver: LibverBound) -> Vec<u8> ⓘ
pub fn encode_at(&self, ctx: &FormatContext, libver: LibverBound) -> Vec<u8> ⓘ
Encode the attribute message for a file whose low libver bound is
libver, which the datatype message inside it follows.
Sourcepub fn encode_for(
&self,
ctx: &FormatContext,
libver: LibverBound,
format: ObjectFormat,
) -> Vec<u8> ⓘ
pub fn encode_for( &self, ctx: &FormatContext, libver: LibverBound, format: ObjectFormat, ) -> Vec<u8> ⓘ
Encode the attribute message at the version a file of this format
calls for, with the datatype inside it at libver.
Sourcepub fn encode_with_fields(
&self,
flags: u8,
datatype: &[u8],
dataspace: &[u8],
) -> EncodedAttribute
pub fn encode_with_fields( &self, flags: u8, datatype: &[u8], dataspace: &[u8], ) -> EncodedAttribute
The version-3 body with its datatype and dataspace fields supplied.
H5O__attr_encode writes each of the two through its message class’s
encoder, which is the shared encoder when that piece is a shared
message — the field then holds a H5O_shared_t and the attribute’s own
flags byte says so (H5O_ATTR_FLAG_TYPE_SHARED /
H5O_ATTR_FLAG_SPACE_SHARED, H5Oattr.c:358-359). Whichever it is, the
size fields record what is actually stored, so the caller supplies the
bytes and the matching flag bits and this lays the message out around
them.
Sourcepub fn decode(buf: &[u8], ctx: &FormatContext) -> FormatResult<(Self, usize)>
pub fn decode(buf: &[u8], ctx: &FormatContext) -> FormatResult<(Self, usize)>
Decode an attribute message from a byte buffer.
Supports versions 1, 2, and 3:
- v1: 8-byte header, each field padded to 8-byte alignment
- v2: 8-byte header, no alignment padding
- v3: 9-byte header (adds charset byte), no alignment padding