Expand description
OMG Common Data Representation (CDR) serialization with Serde See Wikipedia or specification in Section “9.3 CDR Transfer Syntax”.
Full XTYPES specification, which covers a lot more. This implemention is only for “plain” CDR.
§Example
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);
Structs§
- CdrDeserializer
- Deserializer type for converting CDR data stream to Rust objects.
- CdrSerializer
- a CDR serializer implementation
Enums§
- Error
- Several things can go wrong during CDR (de)serialization
Functions§
- from_
bytes - Deserialize an object from
&[u8]
based on aserde::Deserialize
implementation. - to_vec
- Serialize to
Vec<u8>
- to_
vec_ with_ size_ hint - Serialize to
Vec<u8>
Size hint indicates how many bytes to initially allocate for serialized data. - to_
writer - General CDR serialization for type
T:Serialize