From 39c782746b9b6832b7727accc3fa3d88fb136a35 Mon Sep 17 00:00:00 2001 From: Parker Timmerman Date: Sun, 29 Dec 2024 16:31:23 -0500 Subject: [PATCH] deps: upgrade to `rkyv v0.8` (#409) * start, upgrade rkyv to v0.8 * upgrades rkyv to v0.8 * makes necessary changes to the impl * update tests --- compact_str/Cargo.toml | 4 +-- compact_str/src/features/rkyv.rs | 46 ++++++++++++++++++-------------- 2 files changed, 28 insertions(+), 22 deletions(-) diff --git a/compact_str/Cargo.toml b/compact_str/Cargo.toml index 2d67d760..c4c1fbc7 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 } @@ -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 0e56fb4f..b1f3f865 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 { @@ -53,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; @@ -63,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); @@ -85,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);