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