moq_lite/lite/
parameters.rs1use std::collections::HashMap;
2
3use crate::coding::*;
4
5const MAX_PARAMS: u64 = 64;
6
7#[derive(Default, Debug, Clone)]
8pub struct Parameters(HashMap<u64, Vec<u8>>);
9
10impl<V: Clone> Decode<V> for Parameters {
11 fn decode<R: bytes::Buf>(mut r: &mut R, version: V) -> Result<Self, DecodeError> {
12 let mut map = HashMap::new();
13
14 let count = u64::decode(r, version.clone())?;
16 if count > MAX_PARAMS {
17 return Err(DecodeError::TooMany);
18 }
19
20 for _ in 0..count {
21 let kind = u64::decode(r, version.clone())?;
22 if map.contains_key(&kind) {
23 return Err(DecodeError::Duplicate);
24 }
25
26 let data = Vec::<u8>::decode(&mut r, version.clone())?;
27 map.insert(kind, data);
28 }
29
30 Ok(Parameters(map))
31 }
32}
33
34impl<V: Clone> Encode<V> for Parameters {
35 fn encode<W: bytes::BufMut>(&self, w: &mut W, version: V) {
36 self.0.len().encode(w, version.clone());
37
38 for (kind, value) in self.0.iter() {
39 kind.encode(w, version.clone());
40 value.encode(w, version.clone());
41 }
42 }
43}