pub struct IgtlMessage<T: Message> {
pub header: Header,
pub extended_header: Option<Vec<u8>>,
pub content: T,
pub metadata: Option<HashMap<String, String>>,
}Expand description
Complete OpenIGTLink message structure
Wraps a specific message type with header, optional extended header, and optional metadata.
§Type Parameters
T- Message type that implements theMessagetrait
Fields§
§header: HeaderMessage header (58 bytes)
extended_header: Option<Vec<u8>>Extended header (Version 3 feature, optional)
content: TMessage content
metadata: Option<HashMap<String, String>>Metadata as key-value pairs (Version 3 feature, optional)
Implementations§
Source§impl<T: Message> IgtlMessage<T>
impl<T: Message> IgtlMessage<T>
Sourcepub fn set_extended_header(&mut self, data: Vec<u8>)
pub fn set_extended_header(&mut self, data: Vec<u8>)
Set extended header data (Version 3 feature)
When extended header is set, the message version is automatically upgraded to 3.
§Arguments
data- Extended header data as byte vector
§Examples
let transform = TransformMessage::identity();
let mut msg = IgtlMessage::new(transform, "Device").unwrap();
msg.set_extended_header(vec![0x01, 0x02, 0x03, 0x04]);Sourcepub fn get_extended_header(&self) -> Option<&[u8]>
pub fn get_extended_header(&self) -> Option<&[u8]>
Get extended header data reference (Version 3 feature)
§Returns
Optional reference to extended header bytes
Sourcepub fn clear_extended_header(&mut self)
pub fn clear_extended_header(&mut self)
Remove extended header and optionally downgrade to Version 2
Sourcepub fn set_metadata(&mut self, metadata: HashMap<String, String>)
pub fn set_metadata(&mut self, metadata: HashMap<String, String>)
Set metadata key-value pairs (Version 3 feature)
When metadata is set, the message version is automatically upgraded to 3.
§Arguments
metadata- HashMap of key-value pairs
§Examples
let transform = TransformMessage::identity();
let mut msg = IgtlMessage::new(transform, "Device").unwrap();
let mut metadata = HashMap::new();
metadata.insert("priority".to_string(), "high".to_string());
msg.set_metadata(metadata);Sourcepub fn add_metadata(&mut self, key: String, value: String)
pub fn add_metadata(&mut self, key: String, value: String)
Add a single metadata key-value pair (Version 3 feature)
§Arguments
key- Metadata keyvalue- Metadata value
Sourcepub fn clear_metadata(&mut self)
pub fn clear_metadata(&mut self)
Remove metadata and optionally downgrade to Version 2
Sourcepub fn encode(&self) -> Result<Vec<u8>>
pub fn encode(&self) -> Result<Vec<u8>>
Encode the complete message to bytes
Version 2 format: Header (58) + Content Version 3 format: Header (58) + ExtHdrSize (2) + ExtHdr (var) + Content + Metadata (var)
Metadata format (Version 3):
- MetadataSize (2 bytes, big-endian)
- For each pair:
- KeySize (2 bytes)
- Key (KeySize bytes, UTF-8)
- ValueSize (2 bytes)
- Value (ValueSize bytes, UTF-8)
§Returns
Complete message as byte vector
Sourcepub fn decode_with_options(data: &[u8], verify_crc: bool) -> Result<Self>
pub fn decode_with_options(data: &[u8], verify_crc: bool) -> Result<Self>
Decode a complete message from bytes with optional CRC verification
Allows skipping CRC verification for performance in trusted environments.
§Arguments
data- Byte slice containing the complete messageverify_crc- Whether to verify CRC (true = verify, false = skip)
§Returns
Decoded message or error
§Safety
Disabling CRC verification (verify_crc = false) should only be done in
trusted environments where data corruption is unlikely (e.g., loopback, local network).
Using this in production over unreliable networks may lead to silent data corruption.
§Examples
// Decode with CRC verification (recommended)
let msg = IgtlMessage::<TransformMessage>::decode_with_options(&data, true)?;
// Decode without CRC verification (use with caution)
let msg_fast = IgtlMessage::<TransformMessage>::decode_with_options(&data, false)?;