From d71efc9718f1171132058cfc8b78715d06c1c41a Mon Sep 17 00:00:00 2001 From: Parker Timmerman Date: Sat, 14 Sep 2024 14:30:47 -0400 Subject: [PATCH 1/2] start, upgrade rkyv to v0.8 * upgrades rkyv to v0.8 * makes necessary changes to the impl --- compact_str/Cargo.toml | 2 +- compact_str/src/features/rkyv.rs | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/compact_str/Cargo.toml b/compact_str/Cargo.toml index 2d67d760..d745242b 100644 --- a/compact_str/Cargo.toml +++ b/compact_str/Cargo.toml @@ -38,7 +38,7 @@ diesel = { version = "2", optional = true, default-features = false } markup = { version = "0.13", optional = true, default-features = false } proptest = { version = "1", optional = true, default-features = false, features = ["std"] } quickcheck = { version = "1", optional = true, default-features = false } -rkyv = { version = "0.7", optional = true, default-features = false, features = ["size_32"] } +rkyv = { version = "0.8", optional = true, default-features = false } serde = { version = "1", optional = true, default-features = false, features = ["derive", "alloc"] } smallvec = { version = "1", optional = true, features = ["union"] } sqlx = { version = "0.8", optional = true, default-features = false } diff --git a/compact_str/src/features/rkyv.rs b/compact_str/src/features/rkyv.rs index 0e56fb4f..7047f4fe 100644 --- a/compact_str/src/features/rkyv.rs +++ b/compact_str/src/features/rkyv.rs @@ -1,7 +1,8 @@ #![cfg_attr(docsrs, doc(cfg(feature = "rkyv")))] +use rkyv::rancor::{Fallible, Source}; use rkyv::string::{ArchivedString, StringResolver}; -use rkyv::{Archive, Deserialize, DeserializeUnsized, Fallible, Serialize, SerializeUnsized}; +use rkyv::{Archive, Deserialize, DeserializeUnsized, Place, Serialize, SerializeUnsized}; use crate::CompactString; @@ -10,14 +11,15 @@ impl Archive for CompactString { type Resolver = StringResolver; #[inline] - unsafe fn resolve(&self, pos: usize, resolver: Self::Resolver, out: *mut Self::Archived) { - ArchivedString::resolve_from_str(self.as_str(), pos, resolver, out); + fn resolve(&self, resolver: Self::Resolver, out: Place) { + ArchivedString::resolve_from_str(self.as_str(), resolver, out); } } impl Serialize for CompactString where str: SerializeUnsized, + S::Error: Source, { #[inline] fn serialize(&self, serializer: &mut S) -> Result { From 636b7cb9b205fa07207f2d8137eeb199e73d1e36 Mon Sep 17 00:00:00 2001 From: Parker Timmerman Date: Sun, 29 Dec 2024 16:24:17 -0500 Subject: [PATCH 2/2] update tests --- compact_str/Cargo.toml | 2 +- compact_str/src/features/rkyv.rs | 38 ++++++++++++++++++-------------- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/compact_str/Cargo.toml b/compact_str/Cargo.toml index d745242b..c4c1fbc7 100644 --- a/compact_str/Cargo.toml +++ b/compact_str/Cargo.toml @@ -56,7 +56,7 @@ proptest = { version = "1", default-features = false, features = ["std"] } quickcheck = { version = "1", default-features = false } quickcheck_macros = "1" rayon = "1" -rkyv = { version = "0.7", default-features = false, features = ["alloc", "size_32"] } +rkyv = { version = "0.8.8" } serde = { version = "1", features = ["derive"] } serde_json = "1" test-case = "3" diff --git a/compact_str/src/features/rkyv.rs b/compact_str/src/features/rkyv.rs index 7047f4fe..b1f3f865 100644 --- a/compact_str/src/features/rkyv.rs +++ b/compact_str/src/features/rkyv.rs @@ -55,7 +55,8 @@ impl PartialOrd for ArchivedString { mod tests { use alloc::string::String; - use rkyv::Deserialize; + use rkyv::string::ArchivedString; + use rkyv::{rancor, Archive}; use test_strategy::proptest; use crate::CompactString; @@ -65,20 +66,20 @@ mod tests { fn test_roundtrip() { const VALUE: &str = "Hello, 🌍!"; - let bytes_compact = rkyv::to_bytes::<_, 32>(&CompactString::from(VALUE)).unwrap(); - let bytes_control = rkyv::to_bytes::<_, 32>(&String::from(VALUE)).unwrap(); + let bytes_compact = rkyv::to_bytes::(&CompactString::from(VALUE)).unwrap(); + let bytes_control = rkyv::to_bytes::(&String::from(VALUE)).unwrap(); assert_eq!(&*bytes_compact, &*bytes_control); - let archived = unsafe { rkyv::archived_root::(&bytes_compact) }; - let compact: CompactString = archived.deserialize(&mut rkyv::Infallible).unwrap(); - let control: String = archived.deserialize(&mut rkyv::Infallible).unwrap(); + let archived = rkyv::access::(&bytes_compact).unwrap(); + let compact = rkyv::deserialize::(archived).unwrap(); + let control = rkyv::deserialize::(archived).unwrap(); assert_eq!(archived, VALUE); assert_eq!(compact, VALUE); assert_eq!(control, VALUE); - let archived = unsafe { rkyv::archived_root::(&bytes_compact) }; - let compact: CompactString = archived.deserialize(&mut rkyv::Infallible).unwrap(); - let control: String = archived.deserialize(&mut rkyv::Infallible).unwrap(); + let archived = rkyv::access::(&bytes_compact).unwrap(); + let compact = rkyv::deserialize::(archived).unwrap(); + let control = rkyv::deserialize::(archived).unwrap(); assert_eq!(archived, VALUE); assert_eq!(compact, VALUE); assert_eq!(control, VALUE); @@ -87,20 +88,23 @@ mod tests { #[cfg_attr(miri, ignore)] #[proptest] fn proptest_roundtrip(s: String) { - let bytes_compact = rkyv::to_bytes::<_, 32>(&CompactString::from(&s)).unwrap(); - let bytes_control = rkyv::to_bytes::<_, 32>(&s).unwrap(); + let bytes_compact = rkyv::to_bytes::(&CompactString::from(&s)).unwrap(); + let bytes_control = rkyv::to_bytes::(&s).unwrap(); assert_eq!(&*bytes_compact, &*bytes_control); - let archived = unsafe { rkyv::archived_root::(&bytes_compact) }; - let compact: CompactString = archived.deserialize(&mut rkyv::Infallible).unwrap(); - let control: String = archived.deserialize(&mut rkyv::Infallible).unwrap(); + let archived = + rkyv::access::<::Archived, rancor::Error>(&bytes_compact) + .unwrap(); + let compact = rkyv::deserialize::(archived).unwrap(); + let control = rkyv::deserialize::(archived).unwrap(); assert_eq!(archived, &s); assert_eq!(compact, s); assert_eq!(control, s); - let archived = unsafe { rkyv::archived_root::(&bytes_compact) }; - let compact: CompactString = archived.deserialize(&mut rkyv::Infallible).unwrap(); - let control: String = archived.deserialize(&mut rkyv::Infallible).unwrap(); + let archived = + rkyv::access::<::Archived, rancor::Error>(&bytes_compact).unwrap(); + let compact = rkyv::deserialize::(archived).unwrap(); + let control = rkyv::deserialize::(archived).unwrap(); assert_eq!(archived, &s); assert_eq!(compact, s); assert_eq!(control, s);