From 3b1869b66aec40aba843cc2f147050bcc79ec9d9 Mon Sep 17 00:00:00 2001 From: yuanyuyuan Date: Wed, 10 Sep 2025 15:07:24 +0800 Subject: [PATCH 1/3] chore: formatting --- Cargo.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 8454aac..a0844c0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,7 +7,7 @@ description = "Serde implementation of OMG Common Data Representation (CDR) enco readme = "README.md" keywords = ["network","protocol","dds","rtps"] license = "Apache-2.0" -homepage = "https://atostek.com/en/products/rustdds/" +homepage = "https://atostek.com/en/products/rustdds/" repository = "https://github.com/jhelovuo/cdr-encoding" [workspace] @@ -19,7 +19,7 @@ members = [ ] -# Although cdr-encoding, cdr-encoding-size, and cdr-encoding-size-derive +# Although cdr-encoding, cdr-encoding-size, and cdr-encoding-size-derive # are relaed semantically, # the main crate cdr-encoding does not technically depend on the two others. # From f6f0235c33a36b3be5c92780a276d8ba5962c3a7 Mon Sep 17 00:00:00 2001 From: yuanyuyuan Date: Wed, 10 Sep 2025 15:10:05 +0800 Subject: [PATCH 2/3] support (de)serialize_byte_buf --- src/cdr_deserializer.rs | 10 +++++++++- src/cdr_serializer.rs | 3 +++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/cdr_deserializer.rs b/src/cdr_deserializer.rs index d5fb55b..4b6aafa 100644 --- a/src/cdr_deserializer.rs +++ b/src/cdr_deserializer.rs @@ -267,7 +267,15 @@ where where V: Visitor<'de>, { - self.deserialize_seq(visitor) + // Align to 4 bytes + self.calculate_padding_count_from_written_bytes_and_remove(4)?; + // Length prefix + let len = self.next_bytes(4)?.read_u32::().unwrap() as usize; + // Read the entire buffer at once + let buf = self.next_bytes(len)?.to_vec(); + + visitor.visit_byte_buf(buf) + } fn deserialize_option(self, visitor: V) -> Result diff --git a/src/cdr_serializer.rs b/src/cdr_serializer.rs index 0e78038..7de6ac5 100644 --- a/src/cdr_serializer.rs +++ b/src/cdr_serializer.rs @@ -321,6 +321,9 @@ where } fn serialize_bytes(self, v: &[u8]) -> Result<()> { + // Write length prefix + self.writer.write_all(&v.len().to_le_bytes())?; + // Write raw bytes self.writer.write_all(v)?; Ok(()) } From ef25d97d6a02e327bc9ec66755701d5db71392b1 Mon Sep 17 00:00:00 2001 From: yuanyuyuan Date: Wed, 24 Sep 2025 15:20:59 +0800 Subject: [PATCH 3/3] fix: write the correct byte length --- src/cdr_serializer.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cdr_serializer.rs b/src/cdr_serializer.rs index 7de6ac5..dd6b8c1 100644 --- a/src/cdr_serializer.rs +++ b/src/cdr_serializer.rs @@ -322,7 +322,7 @@ where fn serialize_bytes(self, v: &[u8]) -> Result<()> { // Write length prefix - self.writer.write_all(&v.len().to_le_bytes())?; + self.serialize_u32(v.len() as u32)?; // Write raw bytes self.writer.write_all(v)?; Ok(())