use borsh::{io::*, BorshSerialize, BorshDeserialize}; use sp_core::{ConstU32, bounded::BoundedVec}; pub fn borsh_serialize_bitvec( bitvec: &bitvec::vec::BitVec, writer: &mut W, ) -> Result<()> { let vec: &[u8] = bitvec.as_raw_slice(); BorshSerialize::serialize(vec, writer) } pub fn borsh_deserialize_bitvec( reader: &mut R, ) -> Result> { let bitvec: alloc::vec::Vec = BorshDeserialize::deserialize_reader(reader)?; Ok(bitvec::vec::BitVec::from_vec(bitvec)) } type SerializeBoundedVecAs = alloc::vec::Vec; // TODO: Don't serialize this as a Vec. Shorten the length-prefix, technically encoding as an // enum. pub fn borsh_serialize_bounded_vec( bounded: &BoundedVec>, writer: &mut W, ) -> Result<()> { let vec: &SerializeBoundedVecAs = bounded.as_ref(); BorshSerialize::serialize(vec, writer) } pub fn borsh_deserialize_bounded_vec( reader: &mut R, ) -> Result>> { let vec: SerializeBoundedVecAs = BorshDeserialize::deserialize_reader(reader)?; vec.try_into().map_err(|_| Error::new(ErrorKind::Other, "bound exceeded")) }