2个版本
0.10.1 | 2024年4月24日 |
---|---|
0.10.0 | 2024年4月23日 |
1685 在 编码
每月下载量 1,345
用于 3 个crate(通过 rustdds)
60KB
1.5K SLoC
使用Serde进行OMG通用数据表示(CDR)序列化
由 RustDDS 和 ros2-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