usesuper::{VarZeroSlice, VarZeroVec, VarZeroVecFormat}; usecrate::ule::*; use alloc::boxed::Box; use alloc::vec::Vec; use core::fmt; use core::marker::PhantomData; use serde::de::{self, Deserialize, Deserializer, SeqAccess, Visitor}; #[cfg(feature = "serde")] use serde::ser::{Serialize, SerializeSeq, Serializer};
struct VarZeroVecVisitor<T: ?Sized, F: VarZeroVecFormat> { #[allow(clippy::type_complexity)] // this is a private marker type, who cares
marker: PhantomData<(fn() -> Box<T>, F)>,
}
// ["w", "ω", "文", ""] const NONASCII_STR: &[&str] = &["w", "ω", "文", ""]; const NONASCII_BYTES: &[u8] = &[ 4, 0, 0, 0, 0, 0, 1, 0, 3, 0, 6, 0, 119, 207, 137, 230, 150, 135, 240, 145, 132, 131,
]; #[test] fn test_serde_json() { let zerovec_orig: VarZeroVec<str> = VarZeroVec::parse_byte_slice(BYTES).expect("parse"); let json_str = serde_json::to_string(&zerovec_orig).expect("serialize");
assert_eq!(JSON_STR, json_str); // VarZeroVec should deserialize from JSON to either Vec or VarZeroVec let vec_new: Vec<Box<str>> =
serde_json::from_str(&json_str).expect("deserialize from buffer to Vec");
assert_eq!(zerovec_orig.to_vec(), vec_new); let zerovec_new: VarZeroVec<str> =
serde_json::from_str(&json_str).expect("deserialize from buffer to VarZeroVec");
assert_eq!(zerovec_orig.to_vec(), zerovec_new.to_vec());
assert!(zerovec_new.is_owned());
}
#[test] fn test_serde_bincode() { let zerovec_orig: VarZeroVec<str> = VarZeroVec::parse_byte_slice(BYTES).expect("parse"); let bincode_buf = bincode::serialize(&zerovec_orig).expect("serialize");
assert_eq!(BINCODE_BUF, bincode_buf); let zerovec_new: VarZeroVec<str> =
bincode::deserialize(&bincode_buf).expect("deserialize from buffer to VarZeroVec");
assert_eq!(zerovec_orig.to_vec(), zerovec_new.to_vec());
assert!(!zerovec_new.is_owned());
}
#[test] fn test_vzv_borrowed() { let zerovec_orig: &VarZeroSlice<str> =
VarZeroSlice::parse_byte_slice(BYTES).expect("parse"); let bincode_buf = bincode::serialize(&zerovec_orig).expect("serialize");
assert_eq!(BINCODE_BUF, bincode_buf); let zerovec_new: &VarZeroSlice<str> =
bincode::deserialize(&bincode_buf).expect("deserialize from buffer to VarZeroSlice");
assert_eq!(zerovec_orig.to_vec(), zerovec_new.to_vec());
}
#[test] fn test_nonascii_bincode() { let src_vec = NONASCII_STR
.iter()
.copied()
.map(Box::<str>::from)
.collect::<Vec<_>>(); letmut zerovec: VarZeroVec<str> =
VarZeroVec::parse_byte_slice(NONASCII_BYTES).expect("parse");
assert_eq!(zerovec.to_vec(), src_vec); let bincode_buf = bincode::serialize(&zerovec).expect("serialize"); let zerovec_result =
bincode::deserialize::<VarZeroVec<str>>(&bincode_buf).expect("deserialize");
assert_eq!(zerovec_result.to_vec(), src_vec);
// try again with owned zerovec
zerovec.make_mut(); let bincode_buf = bincode::serialize(&zerovec).expect("serialize"); let zerovec_result =
bincode::deserialize::<VarZeroVec<str>>(&bincode_buf).expect("deserialize");
assert_eq!(zerovec_result.to_vec(), src_vec);
}
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-06-26)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.