diff --git a/src/array.rs b/src/array.rs index 8cf8b38..9314ef1 100644 --- a/src/array.rs +++ b/src/array.rs @@ -1,4 +1,4 @@ -use serde::{Deserialize, Deserializer, Serialize, de::Visitor}; +use serde::{Deserialize, Deserializer, Serialize, de::Visitor, ser::SerializeTuple}; use ssz::{Decode, DecodeError, Encode}; use std::ops::{Deref, DerefMut}; @@ -91,7 +91,11 @@ impl Serialize for FieldArray { where S: serde::Serializer, { - serializer.collect_seq(self.0.iter().map(PrimeField32::as_canonical_u32)) + let mut seq = serializer.serialize_tuple(N)?; + for element in self.0.iter().map(PrimeField32::as_canonical_u32) { + seq.serialize_element(&element)?; + } + seq.end() } } @@ -124,7 +128,7 @@ impl<'de, const N: usize> Deserialize<'de> for FieldArray { } } - deserializer.deserialize_seq(FieldArrayVisitor::) + deserializer.deserialize_tuple(N, FieldArrayVisitor::) } } @@ -355,4 +359,12 @@ mod tests { assert_ne!(arr1, arr3); assert_ne!(arr2, arr3); } + + #[test] + fn test_bincode_no_size_prefix() { + let config = bincode::config::standard().with_fixed_int_encoding(); + let arr = FieldArray([F::new(1), F::new(2), F::new(3)]); + let encoded = bincode::serde::encode_to_vec(arr, config).unwrap(); + assert_eq!(encoded.len(), arr.len() * F::NUM_BYTES); + } }