cdr-encoding-size

Crates.iocdr-encoding-size
lib.rscdr-encoding-size
version0.5.1
sourcesrc
created_at2021-11-04 11:40:26.168193
updated_at2024-04-24 07:46:50.899793
descriptionHelper crate for RustDDS: Trait to compute the maximum CDR-serialized size of data
homepage
repositoryhttps://github.com/jhelovuo/cdr-encoding
max_upload_size
id476602
size5,944
Juhana Helovuo (jhelovuo)

documentation

README

This crate specifies the CdrEncodingSize trait. It is a helper to the RustDDS library.

The trait is in a separate crate, because it has a derive-macro, and (the Rust Programming Language, Section "19.5 Macros")[https://doc.rust-lang.org/book/ch19-06-macros.html] advises that "At the time of this writing, procedural macros need to be in their own crate. Eventually, this restriction might be lifted."

The RTPS specification version 2.5 Section "9.6.4.8 KeyHash (PID_KEY_HASH)" defines an algorithm for computing a 16-byte hash of a DDS Key of a data sample.

The algorithm summary:

  • Define a "holder" type corresponding to the data sample type.
  • The holder type consists of all the fields that form the Key of the data sample type.
  • The holder type is serialized according to PLAIN_CDR2 Big Endian rules.
  • If the holder type has maximum serialized size of at most 16 bytes, the serialized representation produced in the previous step, padded with zero bytes to be exactly 16 bytes, is the "key hash".
  • If the holder type has maximum serialized size of more than 16 bytes, then the MD5 hash of the serialized representation above is computed, and this is the "key hash"
  • This always results in a "key hash" of exactly 16 bytes.

This trait is an automated mechanism for deciding if the 16-byte limit is exceeded, i.e. if MD5 hashing should be used or not.

TODO

  • Derive macro supports primitive types and structs, but not enum types. It will fail if a Key type is, or contains, an enum.
Commit count: 18

cargo fmt