cardano_serialization_lib/serialization/plutus/
strings.rs

1use crate::*;
2use crate::serialization::utils::is_break_tag;
3
4impl cbor_event::se::Serialize for Strings {
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 element in &self.0 {
11            serializer.write_text(&element)?;
12        }
13        Ok(serializer)
14    }
15}
16
17impl Deserialize for Strings {
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, "Strings")? {
27                    break;
28                }
29                arr.push(String::deserialize(raw)?);
30            }
31            Ok(())
32        })()
33            .map_err(|e| e.annotate("Strings"))?;
34        Ok(Self(arr))
35    }
36}