cardano_serialization_lib/serialization/plutus/
cost_model.rs

1use crate::*;
2use crate::serialization::utils::is_break_tag;
3
4impl cbor_event::se::Serialize for CostModel {
5    fn serialize<'se, W: Write>(
6        &self,
7        serializer: &'se mut Serializer<W>,
8    ) -> cbor_event::Result<&'se mut Serializer<W>> {
9        serializer.write_array(cbor_event::Len::Len(self.0.len() as u64))?;
10        for cost in &self.0 {
11            cost.serialize(serializer)?;
12        }
13        Ok(serializer)
14    }
15}
16
17impl Deserialize for CostModel {
18    fn deserialize<R: BufRead + Seek>(raw: &mut Deserializer<R>) -> Result<Self, DeserializeError> {
19        let mut arr = Vec::new();
20        (|| -> Result<_, DeserializeError> {
21            let len = raw.array()?;
22            while match len {
23                cbor_event::Len::Len(n) => arr.len() < n as usize,
24                cbor_event::Len::Indefinite => true,
25            } {
26                if is_break_tag(raw, "CostModel")? {
27                    break;
28                }
29                arr.push(Int::deserialize(raw)?);
30            }
31            Ok(())
32        })()
33            .map_err(|e| e.annotate("CostModel"))?;
34        Ok(Self(arr.try_into().unwrap()))
35    }
36}