1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
}
}