diff --git a/blockchain/chain_sync/src/sync.rs b/blockchain/chain_sync/src/sync.rs index 30ffcaeee4f6..c18b0c811bd8 100644 --- a/blockchain/chain_sync/src/sync.rs +++ b/blockchain/chain_sync/src/sync.rs @@ -1115,7 +1115,7 @@ mod tests { compute_msg_meta(&blockstore, &usm, &sm) .unwrap() .to_string(), - "bafy2bzacecgw6dqj4bctnbnyqfujltkwu7xc7ttaaato4i5miroxr4bayhfea" + "bafy2bzacecmda75ovposbdateg7eyhwij65zklgyijgcjwynlklmqazpwlhba" ); } } diff --git a/crypto/src/vrf.rs b/crypto/src/vrf.rs index df86498f2b21..8939053711f6 100644 --- a/crypto/src/vrf.rs +++ b/crypto/src/vrf.rs @@ -37,6 +37,7 @@ impl VRFProof { pub mod json { use super::*; use serde::{de, Deserialize, Deserializer, Serialize, Serializer}; + use std::borrow::Cow; pub fn serialize(m: &VRFProof, serializer: S) -> Result where @@ -49,7 +50,9 @@ pub mod json { where D: Deserializer<'de>, { - let s: String = Deserialize::deserialize(deserializer)?; - Ok(VRFProof::new(base64::decode(s).map_err(de::Error::custom)?)) + let s: Cow<'de, str> = Deserialize::deserialize(deserializer)?; + Ok(VRFProof::new( + base64::decode(s.as_ref()).map_err(de::Error::custom)?, + )) } } diff --git a/ipld/amt/src/bitmap.rs b/ipld/amt/src/bitmap.rs index dd210b7db6ed..ab2e537e1f19 100644 --- a/ipld/amt/src/bitmap.rs +++ b/ipld/amt/src/bitmap.rs @@ -15,12 +15,7 @@ impl ser::Serialize for BitMap { where S: ser::Serializer, { - if self.b == 0 { - <[u8] as serde_bytes::Serialize>::serialize(&[], s) - } else { - let bitmap_bz = self.to_byte_array(); - <[u8] as serde_bytes::Serialize>::serialize(&bitmap_bz, s) - } + <[u8] as serde_bytes::Serialize>::serialize(&[self.b], s) } } @@ -29,17 +24,17 @@ impl<'de> de::Deserialize<'de> for BitMap { where D: de::Deserializer<'de>, { - let bz: Vec = serde_bytes::Deserialize::deserialize(deserializer)?; + let bz: &[u8] = serde_bytes::Deserialize::deserialize(deserializer)?; - if bz.is_empty() { - return Ok(BitMap::default()); + if bz.len() != 1 { + return Err(de::Error::custom(&format!( + "Expected 1 bitmap byte, was {}", + bz.len() + ))); } // Get bitmap byte from serialized bytes - let bmap: BitMap = bz - .get(0) - .map(|b| BitMap::new(*b)) - .ok_or_else(|| de::Error::custom("Expected bitmap byte"))?; + let bmap = BitMap::new(bz[0]); Ok(bmap) } diff --git a/ipld/tests/walk_tests.rs b/ipld/tests/walk_tests.rs index 3d2447c4fa70..fed0eaf6cf7a 100644 --- a/ipld/tests/walk_tests.rs +++ b/ipld/tests/walk_tests.rs @@ -56,8 +56,8 @@ mod path_json { where D: Deserializer<'de>, { - let s: String = Deserialize::deserialize(deserializer)?; - Ok(Path::from(s.as_str())) + let s: std::borrow::Cow<'de, str> = Deserialize::deserialize(deserializer)?; + Ok(Path::from(s.as_ref())) } } diff --git a/utils/bigint/src/bigint_ser.rs b/utils/bigint/src/bigint_ser.rs index 324779736bd8..8e5f4dd0910e 100644 --- a/utils/bigint/src/bigint_ser.rs +++ b/utils/bigint/src/bigint_ser.rs @@ -37,11 +37,11 @@ pub fn deserialize<'de, D>(deserializer: D) -> Result where D: serde::Deserializer<'de>, { - let mut bz: Vec = serde_bytes::Deserialize::deserialize(deserializer)?; + let bz: &[u8] = serde_bytes::Deserialize::deserialize(deserializer)?; if bz.is_empty() { return Ok(BigInt::default()); } - let sign_byte = bz.remove(0); + let sign_byte = bz[0]; let sign: Sign = match sign_byte { 1 => Sign::Minus, 0 => Sign::Plus, @@ -51,5 +51,5 @@ where )); } }; - Ok(BigInt::from_bytes_be(sign, &bz)) + Ok(BigInt::from_bytes_be(sign, &bz[1..])) } diff --git a/utils/bigint/src/biguint_ser.rs b/utils/bigint/src/biguint_ser.rs index c617f3f652d7..c12c30ef37e6 100644 --- a/utils/bigint/src/biguint_ser.rs +++ b/utils/bigint/src/biguint_ser.rs @@ -35,16 +35,16 @@ pub fn deserialize<'de, D>(deserializer: D) -> Result where D: serde::Deserializer<'de>, { - let mut bz: Vec = serde_bytes::Deserialize::deserialize(deserializer)?; + let bz: &[u8] = serde_bytes::Deserialize::deserialize(deserializer)?; if bz.is_empty() { return Ok(BigUint::default()); } - if bz.remove(0) != 0 { + if bz.get(0) != Some(&0) { return Err(serde::de::Error::custom( "First byte must be 0 to decode as BigUint", )); } - Ok(BigUint::from_bytes_be(&bz)) + Ok(BigUint::from_bytes_be(&bz[1..])) } diff --git a/utils/bitfield/src/rleplus/mod.rs b/utils/bitfield/src/rleplus/mod.rs index 95e0baa3e206..673dba665e76 100644 --- a/utils/bitfield/src/rleplus/mod.rs +++ b/utils/bitfield/src/rleplus/mod.rs @@ -85,7 +85,7 @@ impl<'de> Deserialize<'de> for BitField { where D: Deserializer<'de>, { - let bytes: Vec = serde_bytes::deserialize(deserializer)?; + let bytes: &[u8] = serde_bytes::deserialize(deserializer)?; Self::from_bytes(&bytes).map_err(serde::de::Error::custom) } } diff --git a/vm/address/src/lib.rs b/vm/address/src/lib.rs index b96006c3e0e7..51659eba5345 100644 --- a/vm/address/src/lib.rs +++ b/vm/address/src/lib.rs @@ -239,7 +239,7 @@ impl<'de> Deserialize<'de> for Address { where D: Deserializer<'de>, { - let bz: Vec = serde_bytes::Deserialize::deserialize(deserializer)?; + let bz: &[u8] = serde_bytes::Deserialize::deserialize(deserializer)?; // Create and return created address of unmarshalled bytes Address::from_bytes(&bz).map_err(de::Error::custom)