From 8245a453959acbf81cd5ebe6246d98f32f68b1dc Mon Sep 17 00:00:00 2001 From: Michail Klimenkov Date: Sun, 22 Jun 2025 13:06:56 +0100 Subject: [PATCH 1/4] fixed rkyv alignment bug --- Cargo.toml | 5 ++--- src/binary/rkyv.rs | 10 ++++++---- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 5b0f83c..456dd28 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "codee" -version = "0.3.1" +version = "0.3.2" edition = "2021" authors = ["Marc-Stefan Cassola"] categories = ["encoding"] @@ -32,6 +32,7 @@ bincode_v1 = { package = "bincode", version = "1", optional = true } bincode = { package = "bincode", version = "2.0.1", optional = true } [features] +rkyv = ["dep:rkyv"] prost = ["dep:prost"] json_serde = ["dep:serde_json", "dep:serde"] msgpack_serde = ["dep:rmp-serde", "dep:serde"] @@ -50,8 +51,6 @@ json_serde_wasm = [ [dev-dependencies] serde = { version = "1", features = ["derive"] } serde-lite = { version = "0.5", features = ["derive"] } -leptos = "0.8" -leptos-use = "0.16" [package.metadata.docs.rs] all-features = true diff --git a/src/binary/rkyv.rs b/src/binary/rkyv.rs index 8dd96ae..5083725 100644 --- a/src/binary/rkyv.rs +++ b/src/binary/rkyv.rs @@ -6,6 +6,7 @@ use rkyv::ser::allocator::ArenaHandle; use rkyv::{bytecheck, rancor, Archive, Deserialize, Serialize}; use std::error::Error; use std::sync::Arc; +use rkyv::util::AlignedVec; /// A codec that relies on `rkyv` to encode data in the msgpack format. /// @@ -14,13 +15,13 @@ pub struct RkyvCodec; impl Encoder for RkyvCodec where - T: for<'a> Serialize, ArenaHandle<'a>, rancor::Error>>, + T: for<'a> Serialize, rancor::Error>>, { type Error = rancor::Error; - type Encoded = Vec; + type Encoded = AlignedVec; fn encode(val: &T) -> Result { - rkyv::api::high::to_bytes_in(val, Vec::new()) + rkyv::api::high::to_bytes_in(val, AlignedVec::new()) } } @@ -32,7 +33,7 @@ where + Deserialize>, { type Error = Arc; - type Encoded = [u8]; + type Encoded = AlignedVec; fn decode(val: &Self::Encoded) -> Result { rkyv::from_bytes::(val).map_err(|e| Arc::new(e) as Arc) @@ -41,6 +42,7 @@ where #[cfg(test)] mod tests { + use rkyv::util::AlignedVec; use super::*; #[test] From c2e6a1901f852d8059fa394eb669f5fafffedfac Mon Sep 17 00:00:00 2001 From: Michail Klimenkov Date: Sun, 22 Jun 2025 13:08:13 +0100 Subject: [PATCH 2/4] upgraded rkyv version --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 456dd28..6110c6d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,7 +16,7 @@ base64 = { version = "0.22", optional = true } js-sys = { version = "0.3", optional = true } miniserde = { version = "0.1", optional = true } prost = { version = "0.14", optional = true } -rkyv = { version = "0.8.9", optional = true } +rkyv = { version = "0.8.10", optional = true } rmp-serde = { version = "1.1", optional = true } serde = { version = "1", optional = true } serde_json = { version = "1", optional = true } From a2430bc1d7dc3bc6dc6e0be9f6898144ab2adf29 Mon Sep 17 00:00:00 2001 From: Michail Klimenkov Date: Sun, 22 Jun 2025 14:07:31 +0100 Subject: [PATCH 3/4] re-exporting rkyv::util::AlignedVec --- src/binary/rkyv.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/binary/rkyv.rs b/src/binary/rkyv.rs index 5083725..f3e8f90 100644 --- a/src/binary/rkyv.rs +++ b/src/binary/rkyv.rs @@ -6,7 +6,7 @@ use rkyv::ser::allocator::ArenaHandle; use rkyv::{bytecheck, rancor, Archive, Deserialize, Serialize}; use std::error::Error; use std::sync::Arc; -use rkyv::util::AlignedVec; +pub use rkyv::util::AlignedVec; /// A codec that relies on `rkyv` to encode data in the msgpack format. /// From a9a6a9894c88c59e151ed6cb544cad2e49d3062b Mon Sep 17 00:00:00 2001 From: Michail Klimenkov Date: Mon, 23 Jun 2025 18:56:13 +0100 Subject: [PATCH 4/4] addressing PR comments --- src/binary/rkyv.rs | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/binary/rkyv.rs b/src/binary/rkyv.rs index f3e8f90..1e375e3 100644 --- a/src/binary/rkyv.rs +++ b/src/binary/rkyv.rs @@ -3,10 +3,10 @@ use rkyv::api::high::{HighSerializer, HighValidator}; use rkyv::de::Pool; use rkyv::rancor::Strategy; use rkyv::ser::allocator::ArenaHandle; +pub use rkyv::util::AlignedVec; use rkyv::{bytecheck, rancor, Archive, Deserialize, Serialize}; use std::error::Error; use std::sync::Arc; -pub use rkyv::util::AlignedVec; /// A codec that relies on `rkyv` to encode data in the msgpack format. /// @@ -15,13 +15,13 @@ pub struct RkyvCodec; impl Encoder for RkyvCodec where - T: for<'a> Serialize, rancor::Error>>, + T: for<'a> Serialize, ArenaHandle<'a>, rancor::Error>>, { type Error = rancor::Error; - type Encoded = AlignedVec; + type Encoded = Vec; fn encode(val: &T) -> Result { - rkyv::api::high::to_bytes_in(val, AlignedVec::new()) + rkyv::api::high::to_bytes_in(val, Vec::new()) } } @@ -33,16 +33,17 @@ where + Deserialize>, { type Error = Arc; - type Encoded = AlignedVec; + type Encoded = [u8]; fn decode(val: &Self::Encoded) -> Result { - rkyv::from_bytes::(val).map_err(|e| Arc::new(e) as Arc) + let mut aligned = AlignedVec::<16>::with_capacity(val.len()); + aligned.extend_from_slice(val); + rkyv::from_bytes::(&aligned).map_err(|e| Arc::new(e) as Arc) } } #[cfg(test)] mod tests { - use rkyv::util::AlignedVec; use super::*; #[test]