cardano_serialization_lib/serialization/plutus/
cost_model.rs1use 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}