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