#数据编码 #dds #协议 #网络 #rtps

cdr-encoding

Serde实现OMG通用数据表示(CDR)编码

2个版本

0.10.1 2024年4月24日
0.10.0 2024年4月23日

1685编码

Download history 53/week @ 2024-04-26 9/week @ 2024-05-03 13/week @ 2024-05-10 13/week @ 2024-05-17 3/week @ 2024-05-24 4/week @ 2024-05-31 15/week @ 2024-06-07 16/week @ 2024-06-14 18/week @ 2024-06-21 12/week @ 2024-06-28 15/week @ 2024-07-05 7/week @ 2024-07-12 4/week @ 2024-07-19 60/week @ 2024-07-26 653/week @ 2024-08-02 627/week @ 2024-08-09

每月下载量 1,345
用于 3 个crate(通过 rustdds

Apache-2.0

60KB
1.5K SLoC

使用Serde进行OMG通用数据表示(CDR)序列化

RustDDSros2-client 使用。

参阅 维基百科第9.3节“CDR传输语法”中的规范

这同样是完整XTYPES 规范的一部分。XTYPES指定了多种编码,其中此实现仅针对“普通”CDR。


lib.rs:

使用Serde进行OMG通用数据表示(CDR)序列化。参阅 维基百科第9.3节“CDR传输语法”中的规范

完整的XTYPES规范,包含更多内容。此实现仅针对“普通”CDR。

示例

 use cdr_encoding::*;
 use serde::{Serialize, Deserialize};
 use byteorder::LittleEndian;

 // This example is originally from https://www.omg.org/spec/DDSI-RTPS/2.3/PDF
 // 10.7 Example for User-defined Topic Data
 #[derive(Serialize, Deserialize, Debug, PartialEq, Eq)]
 struct ShapeType {
   color: String,
   x: i32,
   y: i32,
   size: i32,
 }

 let message = ShapeType {
   color: "BLUE".to_string(),
   x: 34,
   y: 100,
   size: 24,
 };

 let expected_serialized_result: Vec<u8> = vec![
   0x05, 0x00, 0x00, 0x00, 0x42, 0x4c, 0x55, 0x45, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00,
   0x00, 0x64, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
 ];

 let serialized = to_vec::<ShapeType, LittleEndian>(&message).unwrap();
 assert_eq!(serialized, expected_serialized_result);

 let (deserialized_message, _consumed_byte_count)
   = from_bytes::<ShapeType, LittleEndian>(&serialized).unwrap();
 assert_eq!(deserialized_message, message);

依赖项

~0.5–1.2MB
~26K SLoC