use crate::{
codec::{Decode, Encode},
decoder::BufDecoder,
encoder::BufEncoder,
error::DecodeError
};
const COLLECTION_LIMIT: u32 = 64_000_000;
impl<T: Encode> Encode for Vec<T> {
fn encode(&self, enc: &mut BufEncoder) {
enc.write_u32(self.len() as u32);
for item in self {
item.encode(enc);
}
}
}
impl<T: Decode> Decode for Vec<T> {
fn decode(dec: &mut BufDecoder<'_>) -> Result<Self, DecodeError> {
let len = dec.read_u32()?;
if len > COLLECTION_LIMIT {
return Err(DecodeError::CollectionTooLarge { len, limit: COLLECTION_LIMIT });
}
let mut out = Vec::with_capacity(len as usize);
for _ in 0..len {
out.push(T::decode(dec)?);
}
Ok(out)
}
}