1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
use crate::encode::Encode; pub trait Decode<'a>: Sized { fn decode(buf: &'a [u8]) -> Self; } impl<'a, T: Decode<'a> + Encode> Decode<'a> for Vec<T> { fn decode(buf: &'a [u8]) -> Self { let len = u64::decode(&buf[0..32]) as usize; let mut vec: Vec<T> = Vec::with_capacity(len); for index in 0..len { if T::is_dynamic() { vec.push(T::decode(&buf[32 + index * 32..32 + (index + 1) * 32])) } else { let offset = u64::decode(&buf[32 + index * 32..32 + (index + 1) * 32]) as usize; vec.push(T::decode(&buf[offset..])) } } vec } }