From 5259c2ad3de92d105445c9bbba8fbe6ce591f6bc Mon Sep 17 00:00:00 2001 From: Heinz Gies Date: Tue, 13 Aug 2024 13:00:51 +0200 Subject: [PATCH] test boxed vec Signed-off-by: Heinz Gies --- src/macros.rs | 4 ++-- src/serde/value/borrowed/de.rs | 2 +- src/serde/value/borrowed/se.rs | 10 +++++----- src/value/borrowed.rs | 17 +++++++++++------ src/value/borrowed/from.rs | 2 +- src/value/owned/cmp.rs | 2 +- 6 files changed, 21 insertions(+), 16 deletions(-) diff --git a/src/macros.rs b/src/macros.rs index 572fefbf..7327e23e 100644 --- a/src/macros.rs +++ b/src/macros.rs @@ -904,11 +904,11 @@ macro_rules! json_internal_borrowed { }; ([]) => { - $crate::value::borrowed::Value::Array(json_internal_vec![]) + $crate::value::borrowed::Value::Array(Box::new(json_internal_vec![])) }; ([ $($tt:tt)+ ]) => { - $crate::value::borrowed::Value::Array(json_internal_borrowed!(@array [] $($tt)+)) + $crate::value::borrowed::Value::Array(Box::new(json_internal_borrowed!(@array [] $($tt)+))) }; ({}) => { diff --git a/src/serde/value/borrowed/de.rs b/src/serde/value/borrowed/de.rs index f9d31af2..0e397d66 100644 --- a/src/serde/value/borrowed/de.rs +++ b/src/serde/value/borrowed/de.rs @@ -499,7 +499,7 @@ impl<'de> Visitor<'de> for ValueVisitor { while let Some(e) = seq.next_element()? { v.push(e); } - Ok(Value::Array(v)) + Ok(Value::Array(Box::new(v))) } } diff --git a/src/serde/value/borrowed/se.rs b/src/serde/value/borrowed/se.rs index 4436cd33..64848dcf 100644 --- a/src/serde/value/borrowed/se.rs +++ b/src/serde/value/borrowed/se.rs @@ -31,7 +31,7 @@ impl<'value> Serialize for Value<'value> { Value::String(s) => serializer.serialize_str(s), Value::Array(v) => { let mut seq = serializer.serialize_seq(Some(v.len()))?; - for e in v { + for e in v.as_ref() { seq.serialize_element(e)?; } seq.end() @@ -298,7 +298,7 @@ impl<'se> serde::ser::SerializeSeq for SerializeVec<'se> { } fn end(self) -> Result> { - Ok(Value::Array(self.vec)) + Ok(Value::Array(Box::new(self.vec))) } } @@ -348,7 +348,7 @@ impl<'se> serde::ser::SerializeTupleVariant for SerializeTupleVariant<'se> { fn end(self) -> Result> { let mut object = Object::with_capacity_and_hasher(1, ObjectHasher::default()); - object.insert_nocheck(self.name.into(), Value::Array(self.vec)); + object.insert_nocheck(self.name.into(), Value::Array(Box::new(self.vec))); Ok(Value::Object(Box::new(object))) } @@ -654,10 +654,10 @@ mod test { #[test] fn arr() { - let v = Value::Array(vec![ + let v = Value::Array(Box::new(vec![ Value::Static(StaticNode::I64(42)), Value::Static(StaticNode::I64(23)), - ]); + ])); let s = serde_json::to_string(&v).expect("Failed to serialize"); assert_eq!(s, "[42,23]"); } diff --git a/src/value/borrowed.rs b/src/value/borrowed.rs index b4313663..7f9e5ee4 100644 --- a/src/value/borrowed.rs +++ b/src/value/borrowed.rs @@ -81,7 +81,7 @@ pub enum Value<'value> { /// string type String(Cow<'value, str>), /// array type - Array(Vec>), + Array(Box>>), /// object type Object(Box>), } @@ -165,7 +165,7 @@ impl<'value> ValueBuilder<'value> for Value<'value> { #[cfg_attr(not(feature = "no-inline"), inline)] #[must_use] fn array_with_capacity(capacity: usize) -> Self { - Self::Array(Vec::with_capacity(capacity)) + Self::Array(Box::new(Vec::with_capacity(capacity))) } #[cfg_attr(not(feature = "no-inline"), inline)] #[must_use] @@ -331,7 +331,7 @@ impl<'value> ValueIntoArray for Value<'value> { fn into_array(self) -> Option<::Array> { match self { - Self::Array(a) => Some(a), + Self::Array(a) => Some(*a), _ => None, } } @@ -432,7 +432,7 @@ impl<'de> BorrowDeserializer<'de> { } res.set_len(len); } - Value::Array(res) + Value::Array(Box::new(res)) } #[cfg_attr(not(feature = "no-inline"), inline)] @@ -492,7 +492,7 @@ impl<'tape, 'de> BorrowSliceDeserializer<'tape, 'de> { } res.set_len(len); } - Value::Array(res) + Value::Array(Box::new(res)) } #[cfg_attr(not(feature = "no-inline"), inline)] @@ -980,7 +980,7 @@ mod test { |inner| { prop_oneof![ // Take the inner strategy and make the two recursive cases. - prop::collection::vec(inner.clone(), 0..10).prop_map(Value::Array), + prop::collection::vec(inner.clone(), 0..10).prop_map(Value::from), prop::collection::hash_map(".*".prop_map(Cow::from), inner, 0..10) .prop_map(|m| m.into_iter().collect()), ] @@ -1129,4 +1129,9 @@ mod test { let v: Value = v.into(); assert_eq!(v, 42); } + + // #[test] + // fn size() { + // assert_eq!(std::mem::size_of::(), 24); + // } } diff --git a/src/value/borrowed/from.rs b/src/value/borrowed/from.rs index 9327d35d..7487377b 100644 --- a/src/value/borrowed/from.rs +++ b/src/value/borrowed/from.rs @@ -218,7 +218,7 @@ impl<'value, V: Into>> FromIterator for Value<'value> { #[cfg_attr(not(feature = "no-inline"), inline)] #[must_use] fn from_iter>(iter: I) -> Self { - Value::Array(iter.into_iter().map(Into::into).collect()) + Value::Array(Box::new(iter.into_iter().map(Into::into).collect())) } } diff --git a/src/value/owned/cmp.rs b/src/value/owned/cmp.rs index 73d291d6..3c25470f 100644 --- a/src/value/owned/cmp.rs +++ b/src/value/owned/cmp.rs @@ -9,7 +9,7 @@ impl PartialEq> for Value { match (self, other) { (Self::Static(s1), BorrowedValue::Static(s2)) => s1 == s2, (Self::String(v1), BorrowedValue::String(v2)) => v1.eq(v2), - (Self::Array(v1), BorrowedValue::Array(v2)) => v1.eq(v2), + (Self::Array(v1), BorrowedValue::Array(v2)) => v1.eq(v2.as_ref()), (Self::Object(v1), BorrowedValue::Object(v2)) => { if v1.len() != v2.len() { return false;