| 44 | |
| 45 | impl TlvStream { |
| 46 | pub fn to_bytes(&mut self) -> Result<Vec<u8>> { |
| 47 | self.0.sort_by_key(|r| r.type_); |
| 48 | for w in self.0.windows(2) { |
| 49 | if w[0].type_ == w[1].type_ { |
| 50 | return Err(TlvError::DuplicateType(w[0].type_).into()); |
| 51 | } |
| 52 | if w[0].type_ > w[1].type_ { |
| 53 | return Err(TlvError::NotSorted.into()); |
| 54 | } |
| 55 | } |
| 56 | let mut out = Vec::new(); |
| 57 | for rec in &self.0 { |
| 58 | out.extend(encode_bigsize(rec.type_)); |
| 59 | out.extend(encode_bigsize(rec.value.len() as u64)); |
| 60 | out.extend(&rec.value); |
| 61 | } |
| 62 | Ok(out) |
| 63 | } |
| 64 | |
| 65 | pub fn from_bytes(mut bytes: &[u8]) -> Result<Self> { |
| 66 | let mut recs = Vec::new(); |