cdr-encoding-size 0.5.1

Helper crate for RustDDS: Trait to compute the maximum CDR-serialized size of data
Documentation
  • Coverage
  • 33.33%
    2 out of 6 items documented0 out of 3 items with examples
  • Size
  • Source code size: 6.85 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 1.74 MB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 13s Average build duration of successful builds.
  • all releases: 13s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • Atostek/cdr-encoding
    8 3 0
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • jhelovuo

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.