#size #serialization #data #key-hash #maximum #dds #representation

cdr-encoding-size

为RustDDS提供的辅助库:用于计算数据的最大CDR序列化大小

2个版本

0.5.1 2024年4月24日
0.5.0 2021年11月4日

#485 in 编码

Download history 417/week @ 2024-04-08 409/week @ 2024-04-15 491/week @ 2024-04-22 472/week @ 2024-04-29 352/week @ 2024-05-06 401/week @ 2024-05-13 367/week @ 2024-05-20 302/week @ 2024-05-27 349/week @ 2024-06-03 455/week @ 2024-06-10 344/week @ 2024-06-17 424/week @ 2024-06-24 669/week @ 2024-07-01 567/week @ 2024-07-08 901/week @ 2024-07-15 811/week @ 2024-07-22

2,976 monthly downloads
4 个crate中使用 (2 直接使用)

Apache-2.0

7KB
88 代码行

此crate定义了 CdrEncodingSize trait。它是RustDDS库的辅助工具。

因为该trait有一个 derive宏,且(Rust编程语言,第19.5节“宏”)https://doc.rust-lang.net.cn/book/ch19-06-macros.html 建议说,“在撰写本文时,过程宏需要在自己的crate中。最终,这个限制可能会被取消。”

RTPS规范版本2.5第“9.6.4.8 KeyHash (PID_KEY_HASH)”部分定义了一个计算数据样本DDS Key的16字节哈希算法。

算法摘要

  • 定义一个与数据样本类型对应的“holder”类型。
  • holder类型由构成数据样本类型Key的所有字段组成。
  • holder类型按照PLAIN_CDR2大端规则进行序列化。
  • 如果holder类型的最大序列化大小不超过16字节,则上一步产生的序列化表示,通过填充零字节使其正好为16字节,即为“key hash”。
  • 如果holder类型的最大序列化大小超过16字节,则计算上述序列化表示的MD5哈希值,这将是“key hash”。
  • 这将始终产生一个正好为16字节的“key hash”。

此trait是一个自动机制,用于确定是否超出16字节限制,即是否应使用MD5哈希。

待办事项

  • derive宏支持基本类型和 struct,但不支持 enum 类型。如果Key类型是,或包含一个 enum,它将失败。

依赖项

~1.5MB
~35K SLoC