Skip to content

Commit

Permalink
test boxed vec
Browse files Browse the repository at this point in the history
Signed-off-by: Heinz Gies <[email protected]>
  • Loading branch information
Licenser committed Aug 13, 2024
1 parent a07024d commit a401c13
Show file tree
Hide file tree
Showing 6 changed files with 21 additions and 16 deletions.
4 changes: 2 additions & 2 deletions src/macros.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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)+)))
};

({}) => {
Expand Down
2 changes: 1 addition & 1 deletion src/serde/value/borrowed/de.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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)))
}
}

Expand Down
10 changes: 5 additions & 5 deletions src/serde/value/borrowed/se.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down Expand Up @@ -298,7 +298,7 @@ impl<'se> serde::ser::SerializeSeq for SerializeVec<'se> {
}

fn end(self) -> Result<Value<'se>> {
Ok(Value::Array(self.vec))
Ok(Value::Array(Box::new(self.vec)))
}
}

Expand Down Expand Up @@ -348,7 +348,7 @@ impl<'se> serde::ser::SerializeTupleVariant for SerializeTupleVariant<'se> {

fn end(self) -> Result<Value<'se>> {
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)))
}
Expand Down Expand Up @@ -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]");
}
Expand Down
17 changes: 11 additions & 6 deletions src/value/borrowed.rs
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ pub enum Value<'value> {
/// string type
String(Cow<'value, str>),
/// array type
Array(Vec<Value<'value>>),
Array(Box<Vec<Value<'value>>>),
/// object type
Object(Box<Object<'value>>),
}
Expand Down Expand Up @@ -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]
Expand Down Expand Up @@ -331,7 +331,7 @@ impl<'value> ValueIntoArray for Value<'value> {

fn into_array(self) -> Option<<Self as ValueIntoArray>::Array> {
match self {
Self::Array(a) => Some(a),
Self::Array(a) => Some(*a),
_ => None,
}
}
Expand Down Expand Up @@ -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)]
Expand Down Expand Up @@ -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)]
Expand Down Expand Up @@ -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()),
]
Expand Down Expand Up @@ -1129,4 +1129,9 @@ mod test {
let v: Value = v.into();
assert_eq!(v, 42);
}

// #[test]
// fn size() {
// assert_eq!(std::mem::size_of::<Value>(), 24);
// }
}
2 changes: 1 addition & 1 deletion src/value/borrowed/from.rs
Original file line number Diff line number Diff line change
Expand Up @@ -218,7 +218,7 @@ impl<'value, V: Into<Value<'value>>> FromIterator<V> for Value<'value> {
#[cfg_attr(not(feature = "no-inline"), inline)]
#[must_use]
fn from_iter<I: IntoIterator<Item = V>>(iter: I) -> Self {
Value::Array(iter.into_iter().map(Into::into).collect())
Value::Array(Box::new(iter.into_iter().map(Into::into).collect()))
}
}

Expand Down
2 changes: 1 addition & 1 deletion src/value/owned/cmp.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ impl PartialEq<BorrowedValue<'_>> 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;
Expand Down

0 comments on commit a401c13

Please sign in to comment.