1use crate::*;
2use std::io::{Seek, SeekFrom};
3use crate::serialization::utils::is_break_tag;
4use hashlink::LinkedHashMap;
5
6impl cbor_event::se::Serialize for UnitInterval {
10 fn serialize<'se, W: Write>(
11 &self,
12 serializer: &'se mut Serializer<W>,
13 ) -> cbor_event::Result<&'se mut Serializer<W>> {
14 serializer.write_tag(30u64)?;
15 serializer.write_array(cbor_event::Len::Len(2))?;
16 self.numerator.serialize(serializer)?;
17 self.denominator.serialize(serializer)?;
18 Ok(serializer)
19 }
20}
21
22impl Deserialize for UnitInterval {
23 fn deserialize<R: BufRead + Seek>(raw: &mut Deserializer<R>) -> Result<Self, DeserializeError> {
24 (|| -> Result<_, DeserializeError> {
25 let tag = raw.tag()?;
26 if tag != 30 {
27 return Err(DeserializeError::new(
28 "UnitInterval",
29 DeserializeFailure::TagMismatch {
30 found: tag,
31 expected: 30,
32 },
33 ));
34 }
35 let len = raw.array()?;
36 let ret = Self::deserialize_as_embedded_group(raw, len);
37 match len {
38 cbor_event::Len::Len(_) =>
39 {
41 ()
42 }
43 cbor_event::Len::Indefinite => match raw.special()? {
44 CBORSpecial::Break =>
45 {
47 ()
48 }
49 _ => return Err(DeserializeFailure::EndingBreakMissing.into()),
50 },
51 }
52 ret
53 })()
54 .map_err(|e| e.annotate("UnitInterval"))
55 }
56}
57
58impl DeserializeEmbeddedGroup for UnitInterval {
59 fn deserialize_as_embedded_group<R: BufRead + Seek>(
60 raw: &mut Deserializer<R>,
61 _: cbor_event::Len,
62 ) -> Result<Self, DeserializeError> {
63 let numerator = (|| -> Result<_, DeserializeError> { Ok(BigNum::deserialize(raw)?) })()
64 .map_err(|e| e.annotate("numerator"))?;
65 let denominator = (|| -> Result<_, DeserializeError> { Ok(BigNum::deserialize(raw)?) })()
66 .map_err(|e| e.annotate("denominator"))?;
67 Ok(UnitInterval {
68 numerator,
69 denominator,
70 })
71 }
72}
73
74impl cbor_event::se::Serialize for Transaction {
75 fn serialize<'se, W: Write>(
76 &self,
77 serializer: &'se mut Serializer<W>,
78 ) -> cbor_event::Result<&'se mut Serializer<W>> {
79 serializer.write_array(cbor_event::Len::Len(4))?;
80 self.body.serialize(serializer)?;
81 self.witness_set.serialize(serializer)?;
82 serializer.write_special(CBORSpecial::Bool(self.is_valid))?;
83 match &self.auxiliary_data {
84 Some(x) => x.serialize(serializer),
85 None => serializer.write_special(CBORSpecial::Null),
86 }?;
87 Ok(serializer)
88 }
89}
90
91impl Deserialize for Transaction {
92 fn deserialize<R: BufRead + Seek>(raw: &mut Deserializer<R>) -> Result<Self, DeserializeError> {
93 (|| -> Result<_, DeserializeError> {
94 let len = raw.array()?;
95 let ret = Self::deserialize_as_embedded_group(raw, len);
96 match len {
97 cbor_event::Len::Len(_) =>
98 {
100 ()
101 }
102 cbor_event::Len::Indefinite => match raw.special()? {
103 CBORSpecial::Break =>
104 {
106 ()
107 }
108 _ => return Err(DeserializeFailure::EndingBreakMissing.into()),
109 },
110 }
111 ret
112 })()
113 .map_err(|e| e.annotate("Transaction"))
114 }
115}
116
117impl DeserializeEmbeddedGroup for Transaction {
118 fn deserialize_as_embedded_group<R: BufRead + Seek>(
119 raw: &mut Deserializer<R>,
120 _: cbor_event::Len,
121 ) -> Result<Self, DeserializeError> {
122 let body = (|| -> Result<_, DeserializeError> { Ok(TransactionBody::deserialize(raw)?) })()
123 .map_err(|e| e.annotate("body"))?;
124 let witness_set =
125 (|| -> Result<_, DeserializeError> { Ok(TransactionWitnessSet::deserialize(raw)?) })()
126 .map_err(|e| e.annotate("witness_set"))?;
127 let mut checked_auxiliary_data = false;
128 let mut auxiliary_data = None;
129 let is_valid = (|| -> Result<_, DeserializeError> {
130 match raw.cbor_type()? == CBORType::Special {
131 true => {
132 let special = raw.special()?;
134 if let CBORSpecial::Bool(b) = special {
135 return Ok(b);
136 } else if special == CBORSpecial::Null {
137 checked_auxiliary_data = true;
138 return Ok(true);
139 } else {
140 return Err(DeserializeFailure::ExpectedBool.into());
141 }
142 }
143 false => {
144 auxiliary_data = (|| -> Result<_, DeserializeError> {
146 Ok(Some(AuxiliaryData::deserialize(raw)?))
147 })()
148 .map_err(|e| e.annotate("auxiliary_data"))?;
149 checked_auxiliary_data = true;
150 return Ok(true);
151 }
152 }
153 })()
154 .map_err(|e| e.annotate("is_valid"))?;
155 if !checked_auxiliary_data {
156 auxiliary_data = (|| -> Result<_, DeserializeError> {
158 Ok(match raw.cbor_type()? != CBORType::Special {
159 true => Some(AuxiliaryData::deserialize(raw)?),
160 false => {
161 if raw.special()? != CBORSpecial::Null {
162 return Err(DeserializeFailure::ExpectedNull.into());
163 }
164 None
165 }
166 })
167 })()
168 .map_err(|e| e.annotate("auxiliary_data"))?;
169 }
170 Ok(Transaction {
171 body,
172 witness_set,
173 is_valid,
174 auxiliary_data,
175 })
176 }
177}
178
179impl cbor_event::se::Serialize for TransactionOutputs {
180 fn serialize<'se, W: Write>(
181 &self,
182 serializer: &'se mut Serializer<W>,
183 ) -> cbor_event::Result<&'se mut Serializer<W>> {
184 serializer.write_array(cbor_event::Len::Len(self.0.len() as u64))?;
185 for element in &self.0 {
186 element.serialize(serializer)?;
187 }
188 Ok(serializer)
189 }
190}
191
192impl Deserialize for TransactionOutputs {
193 fn deserialize<R: BufRead + Seek>(raw: &mut Deserializer<R>) -> Result<Self, DeserializeError> {
194 let mut arr = Vec::new();
195 (|| -> Result<_, DeserializeError> {
196 let len = raw.array()?;
197 while match len {
198 cbor_event::Len::Len(n) => arr.len() < n as usize,
199 cbor_event::Len::Indefinite => true,
200 } {
201 if is_break_tag(raw, "TransactionOutputs")? {
202 break;
203 }
204 arr.push(TransactionOutput::deserialize(raw)?);
205 }
206 Ok(())
207 })()
208 .map_err(|e| e.annotate("TransactionOutputs"))?;
209 Ok(Self(arr))
210 }
211}
212
213impl cbor_event::se::Serialize for TransactionOutput {
214 fn serialize<'se, W: Write>(
215 &self,
216 serializer: &'se mut Serializer<W>,
217 ) -> cbor_event::Result<&'se mut Serializer<W>> {
218 if self.has_plutus_data() || self.has_script_ref() {
219 let map_len = 2 + opt64(&self.plutus_data) + opt64(&self.script_ref);
221 serializer.write_map(cbor_event::Len::Len(map_len))?;
222 serializer.write_unsigned_integer(0)?;
223 self.address.serialize(serializer)?;
224 serializer.write_unsigned_integer(1)?;
225 self.amount.serialize(serializer)?;
226 if let Some(field) = &self.plutus_data {
227 serializer.write_unsigned_integer(2)?;
228 field.serialize(serializer)?;
229 }
230 if let Some(field) = &self.script_ref {
231 serializer.write_unsigned_integer(3)?;
232 field.serialize(serializer)?;
233 }
234 } else {
235 let data_hash = &self.data_hash();
237 serializer.write_array(cbor_event::Len::Len(2 + opt64(&data_hash)))?;
238 self.address.serialize(serializer)?;
239 self.amount.serialize(serializer)?;
240 if let Some(pure_data_hash) = data_hash {
241 pure_data_hash.serialize(serializer)?;
242 }
243 }
244 Ok(serializer)
245 }
246}
247
248impl Deserialize for TransactionOutput {
251 fn deserialize<R: BufRead + Seek>(raw: &mut Deserializer<R>) -> Result<Self, DeserializeError> {
252 (|| -> Result<_, DeserializeError> {
253 match raw.cbor_type()? {
254 CBORType::Array => {
255 let len = raw.array()?;
256 let ret = Self::deserialize_as_embedded_group(raw, len);
257 match len {
258 cbor_event::Len::Len(_) =>
259 {
261 ()
262 }
263 cbor_event::Len::Indefinite => match raw.special()? {
264 CBORSpecial::Break =>
265 {
267 ()
268 }
269 _ => return Err(DeserializeFailure::EndingBreakMissing.into()),
270 },
271 }
272 ret
273 }
274 CBORType::Map => deserialize_as_postalonzo_output(raw),
275 cbor_type => Err(DeserializeFailure::UnexpectedKeyType(cbor_type).into()),
276 }
277 })()
278 .map_err(|e| e.annotate("TransactionOutput"))
279 }
280}
281
282impl DeserializeEmbeddedGroup for TransactionOutput {
288 fn deserialize_as_embedded_group<R: BufRead + Seek>(
289 raw: &mut Deserializer<R>,
290 _: cbor_event::Len,
291 ) -> Result<Self, DeserializeError> {
292 let address = (|| -> Result<_, DeserializeError> { Ok(Address::deserialize(raw)?) })()
293 .map_err(|e| e.annotate("address"))?;
294 let amount = (|| -> Result<_, DeserializeError> { Ok(Value::deserialize(raw)?) })()
295 .map_err(|e| e.annotate("amount"))?;
296 let data_hash = match raw.cbor_type() {
304 Ok(cbor_event::Type::Bytes) => {
305 let initial_position = raw.as_mut_ref().seek(SeekFrom::Current(0)).unwrap();
306 let bytes = raw.bytes().unwrap();
307 if bytes.len() == DataHash::BYTE_COUNT {
308 Some(DataOption::DataHash(DataHash(bytes[..DataHash::BYTE_COUNT].try_into().unwrap())))
309 } else {
310 raw.as_mut_ref().seek(SeekFrom::Start(initial_position)).unwrap();
313 None
314 }
315 },
316 Ok(_) |
318 Err(_) => None,
320 };
321 Ok(TransactionOutput {
322 address,
323 amount,
324 plutus_data: data_hash,
325 script_ref: None,
326 serialization_format: Some(CborContainerType::Array),
327 })
328 }
329}
330
331fn deserialize_as_postalonzo_output<R: BufRead + Seek>(
332 raw: &mut Deserializer<R>,
333) -> Result<TransactionOutput, DeserializeError> {
334 (|| -> Result<_, DeserializeError> {
335 let len = raw.map()?;
336 let mut read_len = CBORReadLen::new(len);
337 let mut address = None;
338 let mut amount = None;
339 let mut data = None;
340 let mut script_ref = None;
341 let mut read = 0;
342 while match len {
343 cbor_event::Len::Len(n) => read < n as usize,
344 cbor_event::Len::Indefinite => true,
345 } {
346 if let cbor_event::Len::Indefinite = len {
347 if is_break_tag(raw, "post-alonzo output map")? {
348 break;
349 }
350 }
351 match raw.cbor_type()? {
352 CBORType::UnsignedInteger => match raw.unsigned_integer()? {
353 0 => {
354 if address.is_some() {
355 return Err(DeserializeFailure::DuplicateKey(Key::Uint(0)).into());
356 }
357 address = Some(
358 (|| -> Result<_, DeserializeError> {
359 read_len.read_elems(1)?;
360 Ok(Address::deserialize(raw)?)
361 })()
362 .map_err(|e| e.annotate("address"))?,
363 );
364 }
365 1 => {
366 if amount.is_some() {
367 return Err(DeserializeFailure::DuplicateKey(Key::Uint(1)).into());
368 }
369 amount = Some(
370 (|| -> Result<_, DeserializeError> {
371 read_len.read_elems(1)?;
372 Ok(Value::deserialize(raw)?)
373 })()
374 .map_err(|e| e.annotate("amount"))?,
375 );
376 }
377 2 => {
378 if data.is_some() {
379 return Err(DeserializeFailure::DuplicateKey(Key::Uint(2)).into());
380 }
381 data = Some(
382 (|| -> Result<_, DeserializeError> {
383 read_len.read_elems(1)?;
384 Ok(DataOption::deserialize(raw)?)
385 })()
386 .map_err(|e| e.annotate("data"))?,
387 );
388 }
389 3 => {
390 if script_ref.is_some() {
391 return Err(DeserializeFailure::DuplicateKey(Key::Uint(3)).into());
392 }
393 script_ref = Some(
394 (|| -> Result<_, DeserializeError> {
395 read_len.read_elems(1)?;
396 Ok(ScriptRef::deserialize(raw)?)
397 })()
398 .map_err(|e| e.annotate("script_ref"))?,
399 );
400 }
401 unknown_key => {
402 return Err(DeserializeFailure::UnknownKey(Key::Uint(unknown_key)).into())
403 }
404 },
405 other_type => return Err(DeserializeFailure::UnexpectedKeyType(other_type).into()),
406 }
407 read += 1;
408 }
409 let address = match address {
410 Some(x) => x,
411 None => return Err(DeserializeFailure::MandatoryFieldMissing(Key::Uint(0)).into()),
412 };
413 let amount = match amount {
414 Some(x) => x,
415 None => return Err(DeserializeFailure::MandatoryFieldMissing(Key::Uint(1)).into()),
416 };
417
418 read_len.finish()?;
419 Ok(TransactionOutput {
420 address,
421 amount,
422 plutus_data: data,
423 script_ref,
424 serialization_format: Some(CborContainerType::Map),
425 })
426 })()
427 .map_err(|e| e.annotate("TransactionOutput"))
428}
429
430impl Deserialize for DataOption {
431 fn deserialize<R: BufRead + Seek>(raw: &mut Deserializer<R>) -> Result<Self, DeserializeError> {
432 (|| -> Result<_, DeserializeError> {
433 let len = raw.array()?;
434 if let cbor_event::Len::Len(n) = len {
435 if n != 2 {
436 return Err(DeserializeFailure::CBOR(cbor_event::Error::WrongLen(
437 2,
438 len,
439 "[id, datum_or_hash]",
440 ))
441 .into());
442 }
443 }
444 let datum = match raw.unsigned_integer()? {
445 0 => DataOption::DataHash(DataHash::deserialize(raw)?),
446 1 => {
447 match raw.tag()? {
448 24 => {
450 let data = (|| -> Result<_, DeserializeError> {
451 Ok(from_bytes(&raw.bytes()?)?)
452 })()
453 .map_err(|e| e.annotate("PlutusData"))?;
454 DataOption::Data(data)
455 }
456 tag => {
457 return Err(DeserializeFailure::TagMismatch {
458 found: tag,
459 expected: 24,
460 }
461 .into());
462 }
463 }
464 }
465 n => {
466 return Err(DeserializeFailure::FixedValueMismatch {
467 found: Key::Uint(n),
468 expected: Key::Uint(0),
469 }
470 .into())
471 }
472 };
473 if let cbor_event::Len::Indefinite = len {
474 if raw.special()? != CBORSpecial::Break {
475 return Err(DeserializeFailure::EndingBreakMissing.into());
476 }
477 }
478 Ok(datum)
479 })()
480 .map_err(|e| e.annotate("DataOption"))
481 }
482}
483
484impl cbor_event::se::Serialize for DataOption {
485 fn serialize<'a, W: Write + Sized>(
486 &self,
487 serializer: &'a mut Serializer<W>,
488 ) -> cbor_event::Result<&'a mut Serializer<W>> {
489 serializer.write_array(cbor_event::Len::Len(2))?;
490 match &self {
491 DataOption::DataHash(data_hash) => {
492 serializer.write_unsigned_integer(0)?;
493 data_hash.serialize(serializer)?;
494 }
495 DataOption::Data(data) => {
496 serializer.write_unsigned_integer(1)?;
497 let bytes = data.to_bytes();
498 serializer.write_tag(24)?.write_bytes(&bytes)?;
499 }
500 }
501 Ok(serializer)
502 }
503}
504
505impl cbor_event::se::Serialize for Ipv4 {
506 fn serialize<'se, W: Write>(
507 &self,
508 serializer: &'se mut Serializer<W>,
509 ) -> cbor_event::Result<&'se mut Serializer<W>> {
510 serializer.write_bytes(&self.0)
511 }
512}
513
514impl Deserialize for Ipv4 {
515 fn deserialize<R: BufRead + Seek>(raw: &mut Deserializer<R>) -> Result<Self, DeserializeError> {
516 Self::new_impl(raw.bytes()?)
517 }
518}
519
520impl cbor_event::se::Serialize for Ipv6 {
521 fn serialize<'se, W: Write>(
522 &self,
523 serializer: &'se mut Serializer<W>,
524 ) -> cbor_event::Result<&'se mut Serializer<W>> {
525 serializer.write_bytes(&self.0)
526 }
527}
528
529impl Deserialize for Ipv6 {
530 fn deserialize<R: BufRead + Seek>(raw: &mut Deserializer<R>) -> Result<Self, DeserializeError> {
531 Self::new_impl(raw.bytes()?)
532 }
533}
534
535impl cbor_event::se::Serialize for DNSRecordAorAAAA {
536 fn serialize<'se, W: Write>(
537 &self,
538 serializer: &'se mut Serializer<W>,
539 ) -> cbor_event::Result<&'se mut Serializer<W>> {
540 serializer.write_text(&self.0)
541 }
542}
543
544impl Deserialize for DNSRecordAorAAAA {
545 fn deserialize<R: BufRead + Seek>(raw: &mut Deserializer<R>) -> Result<Self, DeserializeError> {
546 Self::new_impl(raw.text()?)
547 }
548}
549
550impl cbor_event::se::Serialize for DNSRecordSRV {
551 fn serialize<'se, W: Write>(
552 &self,
553 serializer: &'se mut Serializer<W>,
554 ) -> cbor_event::Result<&'se mut Serializer<W>> {
555 serializer.write_text(&self.0)
556 }
557}
558
559impl Deserialize for DNSRecordSRV {
560 fn deserialize<R: BufRead + Seek>(raw: &mut Deserializer<R>) -> Result<Self, DeserializeError> {
561 Self::new_impl(raw.text()?)
562 }
563}
564
565impl cbor_event::se::Serialize for URL {
566 fn serialize<'se, W: Write>(
567 &self,
568 serializer: &'se mut Serializer<W>,
569 ) -> cbor_event::Result<&'se mut Serializer<W>> {
570 serializer.write_text(&self.0)
571 }
572}
573
574impl Deserialize for URL {
575 fn deserialize<R: BufRead + Seek>(raw: &mut Deserializer<R>) -> Result<Self, DeserializeError> {
576 Self::new_impl(raw.text()?)
577 }
578}
579
580impl cbor_event::se::Serialize for SingleHostAddr {
581 fn serialize<'se, W: Write>(
582 &self,
583 serializer: &'se mut Serializer<W>,
584 ) -> cbor_event::Result<&'se mut Serializer<W>> {
585 serializer.write_array(cbor_event::Len::Len(4))?;
586 self.serialize_as_embedded_group(serializer)
587 }
588}
589
590impl SerializeEmbeddedGroup for SingleHostAddr {
591 fn serialize_as_embedded_group<'se, W: Write>(
592 &self,
593 serializer: &'se mut Serializer<W>,
594 ) -> cbor_event::Result<&'se mut Serializer<W>> {
595 serializer.write_unsigned_integer(0u64)?;
596 match &self.port {
597 Some(x) => x.serialize(serializer),
598 None => serializer.write_special(CBORSpecial::Null),
599 }?;
600 match &self.ipv4 {
601 Some(x) => x.serialize(serializer),
602 None => serializer.write_special(CBORSpecial::Null),
603 }?;
604 match &self.ipv6 {
605 Some(x) => x.serialize(serializer),
606 None => serializer.write_special(CBORSpecial::Null),
607 }?;
608 Ok(serializer)
609 }
610}
611
612impl Deserialize for SingleHostAddr {
613 fn deserialize<R: BufRead + Seek>(raw: &mut Deserializer<R>) -> Result<Self, DeserializeError> {
614 (|| -> Result<_, DeserializeError> {
615 let len = raw.array()?;
616 let ret = Self::deserialize_as_embedded_group(raw, len);
617 match len {
618 cbor_event::Len::Len(_) =>
619 {
621 ()
622 }
623 cbor_event::Len::Indefinite => match raw.special()? {
624 CBORSpecial::Break =>
625 {
627 ()
628 }
629 _ => return Err(DeserializeFailure::EndingBreakMissing.into()),
630 },
631 }
632 ret
633 })()
634 .map_err(|e| e.annotate("SingleHostAddr"))
635 }
636}
637
638impl DeserializeEmbeddedGroup for SingleHostAddr {
639 fn deserialize_as_embedded_group<R: BufRead + Seek>(
640 raw: &mut Deserializer<R>,
641 _: cbor_event::Len,
642 ) -> Result<Self, DeserializeError> {
643 (|| -> Result<_, DeserializeError> {
644 let index_0_value = raw.unsigned_integer()?;
645 if index_0_value != 0 {
646 return Err(DeserializeFailure::FixedValueMismatch {
647 found: Key::Uint(index_0_value),
648 expected: Key::Uint(0),
649 }
650 .into());
651 }
652 Ok(())
653 })()
654 .map_err(|e| e.annotate("index_0"))?;
655 let port = (|| -> Result<_, DeserializeError> {
656 Ok(match raw.cbor_type()? != CBORType::Special {
657 true => Some(Port::deserialize(raw)?),
658 false => {
659 if raw.special()? != CBORSpecial::Null {
660 return Err(DeserializeFailure::ExpectedNull.into());
661 }
662 None
663 }
664 })
665 })()
666 .map_err(|e| e.annotate("port"))?;
667 let ipv4 = (|| -> Result<_, DeserializeError> {
668 Ok(match raw.cbor_type()? != CBORType::Special {
669 true => Some(Ipv4::deserialize(raw)?),
670 false => {
671 if raw.special()? != CBORSpecial::Null {
672 return Err(DeserializeFailure::ExpectedNull.into());
673 }
674 None
675 }
676 })
677 })()
678 .map_err(|e| e.annotate("ipv4"))?;
679 let ipv6 = (|| -> Result<_, DeserializeError> {
680 Ok(match raw.cbor_type()? != CBORType::Special {
681 true => Some(Ipv6::deserialize(raw)?),
682 false => {
683 if raw.special()? != CBORSpecial::Null {
684 return Err(DeserializeFailure::ExpectedNull.into());
685 }
686 None
687 }
688 })
689 })()
690 .map_err(|e| e.annotate("ipv6"))?;
691 Ok(SingleHostAddr { port, ipv4, ipv6 })
692 }
693}
694
695impl cbor_event::se::Serialize for SingleHostName {
696 fn serialize<'se, W: Write>(
697 &self,
698 serializer: &'se mut Serializer<W>,
699 ) -> cbor_event::Result<&'se mut Serializer<W>> {
700 serializer.write_array(cbor_event::Len::Len(3))?;
701 self.serialize_as_embedded_group(serializer)
702 }
703}
704
705impl SerializeEmbeddedGroup for SingleHostName {
706 fn serialize_as_embedded_group<'se, W: Write>(
707 &self,
708 serializer: &'se mut Serializer<W>,
709 ) -> cbor_event::Result<&'se mut Serializer<W>> {
710 serializer.write_unsigned_integer(1u64)?;
711 match &self.port {
712 Some(x) => x.serialize(serializer),
713 None => serializer.write_special(CBORSpecial::Null),
714 }?;
715 self.dns_name.serialize(serializer)?;
716 Ok(serializer)
717 }
718}
719
720impl Deserialize for SingleHostName {
721 fn deserialize<R: BufRead + Seek>(raw: &mut Deserializer<R>) -> Result<Self, DeserializeError> {
722 (|| -> Result<_, DeserializeError> {
723 let len = raw.array()?;
724 let ret = Self::deserialize_as_embedded_group(raw, len);
725 match len {
726 cbor_event::Len::Len(_) =>
727 {
729 ()
730 }
731 cbor_event::Len::Indefinite => match raw.special()? {
732 CBORSpecial::Break =>
733 {
735 ()
736 }
737 _ => return Err(DeserializeFailure::EndingBreakMissing.into()),
738 },
739 }
740 ret
741 })()
742 .map_err(|e| e.annotate("SingleHostName"))
743 }
744}
745
746impl DeserializeEmbeddedGroup for SingleHostName {
747 fn deserialize_as_embedded_group<R: BufRead + Seek>(
748 raw: &mut Deserializer<R>,
749 _: cbor_event::Len,
750 ) -> Result<Self, DeserializeError> {
751 (|| -> Result<_, DeserializeError> {
752 let index_0_value = raw.unsigned_integer()?;
753 if index_0_value != 1 {
754 return Err(DeserializeFailure::FixedValueMismatch {
755 found: Key::Uint(index_0_value),
756 expected: Key::Uint(1),
757 }
758 .into());
759 }
760 Ok(())
761 })()
762 .map_err(|e| e.annotate("index_0"))?;
763 let port = (|| -> Result<_, DeserializeError> {
764 Ok(match raw.cbor_type()? != CBORType::Special {
765 true => Some(Port::deserialize(raw)?),
766 false => {
767 if raw.special()? != CBORSpecial::Null {
768 return Err(DeserializeFailure::ExpectedNull.into());
769 }
770 None
771 }
772 })
773 })()
774 .map_err(|e| e.annotate("port"))?;
775 let dns_name =
776 (|| -> Result<_, DeserializeError> { Ok(DNSRecordAorAAAA::deserialize(raw)?) })()
777 .map_err(|e| e.annotate("dns_name"))?;
778 Ok(SingleHostName { port, dns_name })
779 }
780}
781
782impl cbor_event::se::Serialize for MultiHostName {
783 fn serialize<'se, W: Write>(
784 &self,
785 serializer: &'se mut Serializer<W>,
786 ) -> cbor_event::Result<&'se mut Serializer<W>> {
787 serializer.write_array(cbor_event::Len::Len(2))?;
788 self.serialize_as_embedded_group(serializer)
789 }
790}
791
792impl SerializeEmbeddedGroup for MultiHostName {
793 fn serialize_as_embedded_group<'se, W: Write>(
794 &self,
795 serializer: &'se mut Serializer<W>,
796 ) -> cbor_event::Result<&'se mut Serializer<W>> {
797 serializer.write_unsigned_integer(2u64)?;
798 self.dns_name.serialize(serializer)?;
799 Ok(serializer)
800 }
801}
802
803impl Deserialize for MultiHostName {
804 fn deserialize<R: BufRead + Seek>(raw: &mut Deserializer<R>) -> Result<Self, DeserializeError> {
805 (|| -> Result<_, DeserializeError> {
806 let len = raw.array()?;
807 let ret = Self::deserialize_as_embedded_group(raw, len);
808 match len {
809 cbor_event::Len::Len(_) =>
810 {
812 ()
813 }
814 cbor_event::Len::Indefinite => match raw.special()? {
815 CBORSpecial::Break =>
816 {
818 ()
819 }
820 _ => return Err(DeserializeFailure::EndingBreakMissing.into()),
821 },
822 }
823 ret
824 })()
825 .map_err(|e| e.annotate("MultiHostName"))
826 }
827}
828
829impl DeserializeEmbeddedGroup for MultiHostName {
830 fn deserialize_as_embedded_group<R: BufRead + Seek>(
831 raw: &mut Deserializer<R>,
832 _: cbor_event::Len,
833 ) -> Result<Self, DeserializeError> {
834 (|| -> Result<_, DeserializeError> {
835 let index_0_value = raw.unsigned_integer()?;
836 if index_0_value != 2 {
837 return Err(DeserializeFailure::FixedValueMismatch {
838 found: Key::Uint(index_0_value),
839 expected: Key::Uint(2),
840 }
841 .into());
842 }
843 Ok(())
844 })()
845 .map_err(|e| e.annotate("index_0"))?;
846 let dns_name =
847 (|| -> Result<_, DeserializeError> { Ok(DNSRecordSRV::deserialize(raw)?) })()
848 .map_err(|e| e.annotate("dns_name"))?;
849 Ok(MultiHostName { dns_name })
850 }
851}
852
853impl cbor_event::se::Serialize for RelayEnum {
854 fn serialize<'se, W: Write>(
855 &self,
856 serializer: &'se mut Serializer<W>,
857 ) -> cbor_event::Result<&'se mut Serializer<W>> {
858 match self {
859 RelayEnum::SingleHostAddr(x) => x.serialize(serializer),
860 RelayEnum::SingleHostName(x) => x.serialize(serializer),
861 RelayEnum::MultiHostName(x) => x.serialize(serializer),
862 }
863 }
864}
865
866impl Deserialize for RelayEnum {
867 fn deserialize<R: BufRead + Seek>(raw: &mut Deserializer<R>) -> Result<Self, DeserializeError> {
868 (|| -> Result<_, DeserializeError> {
869 let len = raw.array()?;
870 let ret = Self::deserialize_as_embedded_group(raw, len);
871 match len {
872 cbor_event::Len::Len(_) =>
873 {
875 ()
876 }
877 cbor_event::Len::Indefinite => match raw.special()? {
878 CBORSpecial::Break =>
879 {
881 ()
882 }
883 _ => return Err(DeserializeFailure::EndingBreakMissing.into()),
884 },
885 }
886 ret
887 })()
888 .map_err(|e| e.annotate("RelayEnum"))
889 }
890}
891
892impl DeserializeEmbeddedGroup for RelayEnum {
893 fn deserialize_as_embedded_group<R: BufRead + Seek>(
894 raw: &mut Deserializer<R>,
895 len: cbor_event::Len,
896 ) -> Result<Self, DeserializeError> {
897 let initial_position = raw.as_mut_ref().seek(SeekFrom::Current(0)).unwrap();
898 match (|raw: &mut Deserializer<_>| -> Result<_, DeserializeError> {
899 Ok(SingleHostAddr::deserialize_as_embedded_group(raw, len)?)
900 })(raw)
901 {
902 Ok(variant) => return Ok(RelayEnum::SingleHostAddr(variant)),
903 Err(_) => raw
904 .as_mut_ref()
905 .seek(SeekFrom::Start(initial_position))
906 .unwrap(),
907 };
908 match (|raw: &mut Deserializer<_>| -> Result<_, DeserializeError> {
909 Ok(SingleHostName::deserialize_as_embedded_group(raw, len)?)
910 })(raw)
911 {
912 Ok(variant) => return Ok(RelayEnum::SingleHostName(variant)),
913 Err(_) => raw
914 .as_mut_ref()
915 .seek(SeekFrom::Start(initial_position))
916 .unwrap(),
917 };
918 match (|raw: &mut Deserializer<_>| -> Result<_, DeserializeError> {
919 Ok(MultiHostName::deserialize_as_embedded_group(raw, len)?)
920 })(raw)
921 {
922 Ok(variant) => return Ok(RelayEnum::MultiHostName(variant)),
923 Err(_) => raw
924 .as_mut_ref()
925 .seek(SeekFrom::Start(initial_position))
926 .unwrap(),
927 };
928 Err(DeserializeError::new(
929 "RelayEnum",
930 DeserializeFailure::NoVariantMatched.into(),
931 ))
932 }
933}
934
935impl cbor_event::se::Serialize for Relay {
936 fn serialize<'se, W: Write>(
937 &self,
938 serializer: &'se mut Serializer<W>,
939 ) -> cbor_event::Result<&'se mut Serializer<W>> {
940 self.0.serialize(serializer)
941 }
942}
943
944impl Deserialize for Relay {
945 fn deserialize<R: BufRead + Seek>(raw: &mut Deserializer<R>) -> Result<Self, DeserializeError> {
946 Ok(Self(RelayEnum::deserialize(raw)?))
947 }
948}
949
950impl cbor_event::se::Serialize for PoolMetadata {
951 fn serialize<'se, W: Write>(
952 &self,
953 serializer: &'se mut Serializer<W>,
954 ) -> cbor_event::Result<&'se mut Serializer<W>> {
955 serializer.write_array(cbor_event::Len::Len(2))?;
956 self.url.serialize(serializer)?;
957 self.pool_metadata_hash.serialize(serializer)?;
958 Ok(serializer)
959 }
960}
961
962impl Deserialize for PoolMetadata {
963 fn deserialize<R: BufRead + Seek>(raw: &mut Deserializer<R>) -> Result<Self, DeserializeError> {
964 (|| -> Result<_, DeserializeError> {
965 let len = raw.array()?;
966 let ret = Self::deserialize_as_embedded_group(raw, len);
967 match len {
968 cbor_event::Len::Len(_) =>
969 {
971 ()
972 }
973 cbor_event::Len::Indefinite => match raw.special()? {
974 CBORSpecial::Break =>
975 {
977 ()
978 }
979 _ => return Err(DeserializeFailure::EndingBreakMissing.into()),
980 },
981 }
982 ret
983 })()
984 .map_err(|e| e.annotate("PoolMetadata"))
985 }
986}
987
988impl DeserializeEmbeddedGroup for PoolMetadata {
989 fn deserialize_as_embedded_group<R: BufRead + Seek>(
990 raw: &mut Deserializer<R>,
991 _: cbor_event::Len,
992 ) -> Result<Self, DeserializeError> {
993 let url = (|| -> Result<_, DeserializeError> { Ok(URL::deserialize(raw)?) })()
994 .map_err(|e| e.annotate("url"))?;
995 let pool_metadata_hash =
996 (|| -> Result<_, DeserializeError> { Ok(PoolMetadataHash::deserialize(raw)?) })()
997 .map_err(|e| e.annotate("pool_metadata_hash"))?;
998 Ok(PoolMetadata {
999 url,
1000 pool_metadata_hash,
1001 })
1002 }
1003}
1004
1005impl cbor_event::se::Serialize for RewardAddresses {
1006 fn serialize<'se, W: Write>(
1007 &self,
1008 serializer: &'se mut Serializer<W>,
1009 ) -> cbor_event::Result<&'se mut Serializer<W>> {
1010 serializer.write_array(cbor_event::Len::Len(self.0.len() as u64))?;
1011 for element in &self.0 {
1012 element.serialize(serializer)?;
1013 }
1014 Ok(serializer)
1015 }
1016}
1017
1018impl Deserialize for RewardAddresses {
1019 fn deserialize<R: BufRead + Seek>(raw: &mut Deserializer<R>) -> Result<Self, DeserializeError> {
1020 let mut arr = Vec::new();
1021 (|| -> Result<_, DeserializeError> {
1022 let len = raw.array()?;
1023 while match len {
1024 cbor_event::Len::Len(n) => arr.len() < n as usize,
1025 cbor_event::Len::Indefinite => true,
1026 } {
1027 if is_break_tag(raw, "RewardAddresses")? {
1028 break;
1029 }
1030 arr.push(RewardAddress::deserialize(raw)?);
1031 }
1032 Ok(())
1033 })()
1034 .map_err(|e| e.annotate("RewardAddresses"))?;
1035 Ok(Self(arr))
1036 }
1037}
1038
1039impl cbor_event::se::Serialize for Withdrawals {
1040 fn serialize<'se, W: Write>(
1041 &self,
1042 serializer: &'se mut Serializer<W>,
1043 ) -> cbor_event::Result<&'se mut Serializer<W>> {
1044 serializer.write_map(cbor_event::Len::Len(self.0.len() as u64))?;
1045 for (key, value) in &self.0 {
1046 key.serialize(serializer)?;
1047 value.serialize(serializer)?;
1048 }
1049 Ok(serializer)
1050 }
1051}
1052
1053impl Deserialize for Withdrawals {
1054 fn deserialize<R: BufRead + Seek>(raw: &mut Deserializer<R>) -> Result<Self, DeserializeError> {
1055 let mut table = LinkedHashMap::new();
1056 (|| -> Result<_, DeserializeError> {
1057 let len = raw.map()?;
1058 while match len {
1059 cbor_event::Len::Len(n) => table.len() < n as usize,
1060 cbor_event::Len::Indefinite => true,
1061 } {
1062 if is_break_tag(raw, "Withdrawals")? {
1063 break;
1064 }
1065 let key = RewardAddress::deserialize(raw)?;
1066 let value = Coin::deserialize(raw)?;
1067 if table.insert(key.clone(), value).is_some() {
1068 return Err(DeserializeFailure::DuplicateKey(Key::Str(String::from(
1069 "some complicated/unsupported type",
1070 )))
1071 .into());
1072 }
1073 }
1074 Ok(())
1075 })()
1076 .map_err(|e| e.annotate("Withdrawals"))?;
1077 Ok(Self(table))
1078 }
1079}
1080
1081impl cbor_event::se::Serialize for Update {
1082 fn serialize<'se, W: Write>(
1083 &self,
1084 serializer: &'se mut Serializer<W>,
1085 ) -> cbor_event::Result<&'se mut Serializer<W>> {
1086 serializer.write_array(cbor_event::Len::Len(2))?;
1087 self.proposed_protocol_parameter_updates
1088 .serialize(serializer)?;
1089 self.epoch.serialize(serializer)?;
1090 Ok(serializer)
1091 }
1092}
1093
1094impl Deserialize for Update {
1095 fn deserialize<R: BufRead + Seek>(raw: &mut Deserializer<R>) -> Result<Self, DeserializeError> {
1096 (|| -> Result<_, DeserializeError> {
1097 let len = raw.array()?;
1098 let ret = Self::deserialize_as_embedded_group(raw, len);
1099 match len {
1100 cbor_event::Len::Len(_) =>
1101 {
1103 ()
1104 }
1105 cbor_event::Len::Indefinite => match raw.special()? {
1106 CBORSpecial::Break =>
1107 {
1109 ()
1110 }
1111 _ => return Err(DeserializeFailure::EndingBreakMissing.into()),
1112 },
1113 }
1114 ret
1115 })()
1116 .map_err(|e| e.annotate("Update"))
1117 }
1118}
1119
1120impl DeserializeEmbeddedGroup for Update {
1121 fn deserialize_as_embedded_group<R: BufRead + Seek>(
1122 raw: &mut Deserializer<R>,
1123 _: cbor_event::Len,
1124 ) -> Result<Self, DeserializeError> {
1125 let proposed_protocol_parameter_updates = (|| -> Result<_, DeserializeError> {
1126 Ok(ProposedProtocolParameterUpdates::deserialize(raw)?)
1127 })()
1128 .map_err(|e| e.annotate("proposed_protocol_parameter_updates"))?;
1129 let epoch = (|| -> Result<_, DeserializeError> { Ok(Epoch::deserialize(raw)?) })()
1130 .map_err(|e| e.annotate("epoch"))?;
1131 Ok(Update {
1132 proposed_protocol_parameter_updates,
1133 epoch,
1134 })
1135 }
1136}
1137
1138impl cbor_event::se::Serialize for GenesisHashes {
1139 fn serialize<'se, W: Write>(
1140 &self,
1141 serializer: &'se mut Serializer<W>,
1142 ) -> cbor_event::Result<&'se mut Serializer<W>> {
1143 serializer.write_array(cbor_event::Len::Len(self.0.len() as u64))?;
1144 for element in &self.0 {
1145 element.serialize(serializer)?;
1146 }
1147 Ok(serializer)
1148 }
1149}
1150
1151impl Deserialize for GenesisHashes {
1152 fn deserialize<R: BufRead + Seek>(raw: &mut Deserializer<R>) -> Result<Self, DeserializeError> {
1153 let mut arr = Vec::new();
1154 (|| -> Result<_, DeserializeError> {
1155 let len = raw.array()?;
1156 while match len {
1157 cbor_event::Len::Len(n) => arr.len() < n as usize,
1158 cbor_event::Len::Indefinite => true,
1159 } {
1160 if is_break_tag(raw, "GenesisHashes")? {
1161 break;
1162 }
1163 arr.push(GenesisHash::deserialize(raw)?);
1164 }
1165 Ok(())
1166 })()
1167 .map_err(|e| e.annotate("Genesishashes"))?;
1168 Ok(Self(arr))
1169 }
1170}
1171
1172impl cbor_event::se::Serialize for ScriptHashes {
1173 fn serialize<'se, W: Write>(
1174 &self,
1175 serializer: &'se mut Serializer<W>,
1176 ) -> cbor_event::Result<&'se mut Serializer<W>> {
1177 serializer.write_array(cbor_event::Len::Len(self.0.len() as u64))?;
1178 for element in &self.0 {
1179 element.serialize(serializer)?;
1180 }
1181 Ok(serializer)
1182 }
1183}
1184
1185impl Deserialize for ScriptHashes {
1186 fn deserialize<R: BufRead + Seek>(raw: &mut Deserializer<R>) -> Result<Self, DeserializeError> {
1187 let mut arr = Vec::new();
1188 (|| -> Result<_, DeserializeError> {
1189 let len = raw.array()?;
1190 while match len {
1191 cbor_event::Len::Len(n) => arr.len() < n as usize,
1192 cbor_event::Len::Indefinite => true,
1193 } {
1194 if is_break_tag(raw, "ScriptHashes")? {
1195 break;
1196 }
1197 arr.push(ScriptHash::deserialize(raw)?);
1198 }
1199 Ok(())
1200 })()
1201 .map_err(|e| e.annotate("ScriptHashes"))?;
1202 Ok(Self(arr))
1203 }
1204}
1205
1206impl cbor_event::se::Serialize for ProposedProtocolParameterUpdates {
1207 fn serialize<'se, W: Write>(
1208 &self,
1209 serializer: &'se mut Serializer<W>,
1210 ) -> cbor_event::Result<&'se mut Serializer<W>> {
1211 serializer.write_map(cbor_event::Len::Len(self.0.len() as u64))?;
1212 for (key, value) in &self.0 {
1213 key.serialize(serializer)?;
1214 value.serialize(serializer)?;
1215 }
1216 Ok(serializer)
1217 }
1218}
1219
1220impl Deserialize for ProposedProtocolParameterUpdates {
1221 fn deserialize<R: BufRead + Seek>(raw: &mut Deserializer<R>) -> Result<Self, DeserializeError> {
1222 let mut table = LinkedHashMap::new();
1223 (|| -> Result<_, DeserializeError> {
1224 let len = raw.map()?;
1225 while match len {
1226 cbor_event::Len::Len(n) => table.len() < n as usize,
1227 cbor_event::Len::Indefinite => true,
1228 } {
1229 if is_break_tag(raw, "ProposedProtocolParameterUpdates")? {
1230 break;
1231 }
1232 let key = GenesisHash::deserialize(raw)?;
1233 let value = ProtocolParamUpdate::deserialize(raw)?;
1234 if table.insert(key.clone(), value).is_some() {
1235 return Err(DeserializeFailure::DuplicateKey(Key::Str(String::from(
1236 "some complicated/unsupported type",
1237 )))
1238 .into());
1239 }
1240 }
1241 Ok(())
1242 })()
1243 .map_err(|e| e.annotate("ProposedProtocolParameterUpdates"))?;
1244 Ok(Self(table))
1245 }
1246}
1247
1248impl cbor_event::se::Serialize for ProtocolVersion {
1249 fn serialize<'se, W: Write>(
1250 &self,
1251 serializer: &'se mut Serializer<W>,
1252 ) -> cbor_event::Result<&'se mut Serializer<W>> {
1253 serializer.write_array(cbor_event::Len::Len(2))?;
1254 self.serialize_as_embedded_group(serializer)
1255 }
1256}
1257
1258impl SerializeEmbeddedGroup for ProtocolVersion {
1259 fn serialize_as_embedded_group<'se, W: Write>(
1260 &self,
1261 serializer: &'se mut Serializer<W>,
1262 ) -> cbor_event::Result<&'se mut Serializer<W>> {
1263 self.major.serialize(serializer)?;
1264 self.minor.serialize(serializer)?;
1265 Ok(serializer)
1266 }
1267}
1268
1269impl Deserialize for ProtocolVersion {
1270 fn deserialize<R: BufRead + Seek>(raw: &mut Deserializer<R>) -> Result<Self, DeserializeError> {
1271 (|| -> Result<_, DeserializeError> {
1272 let len = raw.array()?;
1273 let ret = Self::deserialize_as_embedded_group(raw, len);
1274 match len {
1275 cbor_event::Len::Len(_) =>
1276 {
1278 ()
1279 }
1280 cbor_event::Len::Indefinite => match raw.special()? {
1281 CBORSpecial::Break =>
1282 {
1284 ()
1285 }
1286 _ => return Err(DeserializeFailure::EndingBreakMissing.into()),
1287 },
1288 }
1289 ret
1290 })()
1291 .map_err(|e| e.annotate("ProtocolVersion"))
1292 }
1293}
1294
1295impl DeserializeEmbeddedGroup for ProtocolVersion {
1296 fn deserialize_as_embedded_group<R: BufRead + Seek>(
1297 raw: &mut Deserializer<R>,
1298 _: cbor_event::Len,
1299 ) -> Result<Self, DeserializeError> {
1300 let major = (|| -> Result<_, DeserializeError> { Ok(u32::deserialize(raw)?) })()
1301 .map_err(|e| e.annotate("major"))?;
1302 let minor = (|| -> Result<_, DeserializeError> { Ok(u32::deserialize(raw)?) })()
1303 .map_err(|e| e.annotate("minor"))?;
1304 Ok(ProtocolVersion { major, minor })
1305 }
1306}
1307
1308impl cbor_event::se::Serialize for AuxiliaryDataSet {
1309 fn serialize<'se, W: Write>(
1310 &self,
1311 serializer: &'se mut Serializer<W>,
1312 ) -> cbor_event::Result<&'se mut Serializer<W>> {
1313 serializer.write_map(cbor_event::Len::Len(self.0.len() as u64))?;
1314 for (key, value) in &self.0 {
1315 key.serialize(serializer)?;
1316 value.serialize(serializer)?;
1317 }
1318 Ok(serializer)
1319 }
1320}
1321
1322impl Deserialize for AuxiliaryDataSet {
1323 fn deserialize<R: BufRead + Seek>(raw: &mut Deserializer<R>) -> Result<Self, DeserializeError> {
1324 let mut table = LinkedHashMap::new();
1325 (|| -> Result<_, DeserializeError> {
1326 let len = raw.map()?;
1327 while match len {
1328 cbor_event::Len::Len(n) => table.len() < n as usize,
1329 cbor_event::Len::Indefinite => true,
1330 } {
1331 if is_break_tag(raw, "AuxiliaryDataSet")? {
1332 break;
1333 }
1334 let key = TransactionIndex::deserialize(raw)?;
1335 let value = AuxiliaryData::deserialize(raw)?;
1336 if table.insert(key.clone(), value).is_some() {
1337 return Err(DeserializeFailure::DuplicateKey(Key::Str(String::from(
1338 "some complicated/unsupported type",
1339 )))
1340 .into());
1341 }
1342 }
1343 Ok(())
1344 })()
1345 .map_err(|e| e.annotate("AuxiliaryDataSet"))?;
1346 Ok(Self(table))
1347 }
1348}
1349
1350impl cbor_event::se::Serialize for AssetName {
1351 fn serialize<'se, W: Write>(
1352 &self,
1353 serializer: &'se mut Serializer<W>,
1354 ) -> cbor_event::Result<&'se mut Serializer<W>> {
1355 serializer.write_bytes(&self.0)
1356 }
1357}
1358
1359impl Deserialize for AssetName {
1360 fn deserialize<R: BufRead + Seek>(raw: &mut Deserializer<R>) -> Result<Self, DeserializeError> {
1361 Self::new_impl(raw.bytes()?)
1362 }
1363}
1364
1365impl cbor_event::se::Serialize for AssetNames {
1366 fn serialize<'se, W: Write>(
1367 &self,
1368 serializer: &'se mut Serializer<W>,
1369 ) -> cbor_event::Result<&'se mut Serializer<W>> {
1370 serializer.write_array(cbor_event::Len::Len(self.0.len() as u64))?;
1371 for element in &self.0 {
1372 element.serialize(serializer)?;
1373 }
1374 Ok(serializer)
1375 }
1376}
1377
1378impl Deserialize for AssetNames {
1379 fn deserialize<R: BufRead + Seek>(raw: &mut Deserializer<R>) -> Result<Self, DeserializeError> {
1380 let mut arr = Vec::new();
1381 (|| -> Result<_, DeserializeError> {
1382 let len = raw.array()?;
1383 while match len {
1384 cbor_event::Len::Len(n) => arr.len() < n as usize,
1385 cbor_event::Len::Indefinite => true,
1386 } {
1387 if is_break_tag(raw, "AssetNames")? {
1388 break;
1389 }
1390 arr.push(AssetName::deserialize(raw)?);
1391 }
1392 Ok(())
1393 })()
1394 .map_err(|e| e.annotate("AssetNames"))?;
1395 Ok(Self(arr))
1396 }
1397}
1398
1399impl cbor_event::se::Serialize for Assets {
1400 fn serialize<'se, W: Write>(
1401 &self,
1402 serializer: &'se mut Serializer<W>,
1403 ) -> cbor_event::Result<&'se mut Serializer<W>> {
1404 serializer.write_map(cbor_event::Len::Len(self.0.len() as u64))?;
1405 for (key, value) in &self.0 {
1406 key.serialize(serializer)?;
1407 value.serialize(serializer)?;
1408 }
1409 Ok(serializer)
1410 }
1411}
1412
1413impl Deserialize for Assets {
1414 fn deserialize<R: BufRead + Seek>(raw: &mut Deserializer<R>) -> Result<Self, DeserializeError> {
1415 let mut table = std::collections::BTreeMap::new();
1416 (|| -> Result<_, DeserializeError> {
1417 let len = raw.map()?;
1418 while match len {
1419 cbor_event::Len::Len(n) => table.len() < n as usize,
1420 cbor_event::Len::Indefinite => true,
1421 } {
1422 if is_break_tag(raw, "Assets")? {
1423 break;
1424 }
1425 let key = AssetName::deserialize(raw)?;
1426 let value = BigNum::deserialize(raw)?;
1427 if table.insert(key.clone(), value).is_some() {
1428 return Err(DeserializeFailure::DuplicateKey(Key::Str(String::from(
1429 "some complicated/unsupported type",
1430 )))
1431 .into());
1432 }
1433 }
1434 Ok(())
1435 })()
1436 .map_err(|e| e.annotate("Assets"))?;
1437 Ok(Self(table))
1438 }
1439}
1440
1441impl cbor_event::se::Serialize for MultiAsset {
1442 fn serialize<'se, W: Write>(
1443 &self,
1444 serializer: &'se mut Serializer<W>,
1445 ) -> cbor_event::Result<&'se mut Serializer<W>> {
1446 serializer.write_map(cbor_event::Len::Len(self.0.len() as u64))?;
1447 for (key, value) in &self.0 {
1448 key.serialize(serializer)?;
1449 value.serialize(serializer)?;
1450 }
1451 Ok(serializer)
1452 }
1453}
1454
1455impl Deserialize for MultiAsset {
1456 fn deserialize<R: BufRead + Seek>(raw: &mut Deserializer<R>) -> Result<Self, DeserializeError> {
1457 let mut table = std::collections::BTreeMap::new();
1458 (|| -> Result<_, DeserializeError> {
1459 let len = raw.map()?;
1460 while match len {
1461 cbor_event::Len::Len(n) => table.len() < n as usize,
1462 cbor_event::Len::Indefinite => true,
1463 } {
1464 if is_break_tag(raw, "MultiAsset")? {
1465 break;
1466 }
1467 let key = PolicyID::deserialize(raw)?;
1468 let value = Assets::deserialize(raw)?;
1469 if table.insert(key.clone(), value).is_some() {
1470 return Err(DeserializeFailure::DuplicateKey(Key::Str(String::from(
1471 "some complicated/unsupported type",
1472 )))
1473 .into());
1474 }
1475 }
1476 Ok(())
1477 })()
1478 .map_err(|e| e.annotate("MultiAsset"))?;
1479 Ok(Self(table))
1480 }
1481}
1482
1483impl cbor_event::se::Serialize for MintAssets {
1484 fn serialize<'se, W: Write>(
1485 &self,
1486 serializer: &'se mut Serializer<W>,
1487 ) -> cbor_event::Result<&'se mut Serializer<W>> {
1488 serializer.write_map(cbor_event::Len::Len(self.0.len() as u64))?;
1489 for (key, value) in &self.0 {
1490 key.serialize(serializer)?;
1491 value.serialize(serializer)?;
1492 }
1493 Ok(serializer)
1494 }
1495}
1496
1497impl Deserialize for MintAssets {
1498 fn deserialize<R: BufRead + Seek>(raw: &mut Deserializer<R>) -> Result<Self, DeserializeError> {
1499 let mut table = std::collections::BTreeMap::new();
1500 (|| -> Result<_, DeserializeError> {
1501 let len = raw.map()?;
1502 while match len {
1503 cbor_event::Len::Len(n) => table.len() < n as usize,
1504 cbor_event::Len::Indefinite => true,
1505 } {
1506 if is_break_tag(raw, "MintAssets")? {
1507 break;
1508 }
1509 let key = AssetName::deserialize(raw)?;
1510 let value = Int::deserialize(raw)?;
1511 if table.insert(key.clone(), value).is_some() {
1512 return Err(DeserializeFailure::DuplicateKey(Key::Str(String::from(
1513 "some complicated/unsupported type",
1514 )))
1515 .into());
1516 }
1517 }
1518 Ok(())
1519 })()
1520 .map_err(|e| e.annotate("MintAssets"))?;
1521 Ok(Self(table))
1522 }
1523}
1524
1525impl cbor_event::se::Serialize for Mint {
1526 fn serialize<'se, W: Write>(
1527 &self,
1528 serializer: &'se mut Serializer<W>,
1529 ) -> cbor_event::Result<&'se mut Serializer<W>> {
1530 serializer.write_map(cbor_event::Len::Len(self.0.len() as u64))?;
1531 for (key, value) in &self.0 {
1532 key.serialize(serializer)?;
1533 value.serialize(serializer)?;
1534 }
1535 Ok(serializer)
1536 }
1537}
1538
1539impl Deserialize for Mint {
1540 fn deserialize<R: BufRead + Seek>(raw: &mut Deserializer<R>) -> Result<Self, DeserializeError> {
1541 let mut mints = Vec::new();
1542 (|| -> Result<_, DeserializeError> {
1543 let len = raw.map()?;
1544 while match len {
1545 cbor_event::Len::Len(n) => mints.len() < n as usize,
1546 cbor_event::Len::Indefinite => true,
1547 } {
1548 if is_break_tag(raw, "Mint")? {
1549 break;
1550 }
1551 let key = PolicyID::deserialize(raw)?;
1552 let value = MintAssets::deserialize(raw)?;
1553 mints.push((key.clone(), value));
1554 }
1555 Ok(())
1556 })()
1557 .map_err(|e| e.annotate("Mint"))?;
1558 Ok(Self(mints))
1559 }
1560}
1561
1562impl cbor_event::se::Serialize for NetworkId {
1563 fn serialize<'se, W: Write>(
1564 &self,
1565 serializer: &'se mut Serializer<W>,
1566 ) -> cbor_event::Result<&'se mut Serializer<W>> {
1567 match self.0 {
1568 NetworkIdKind::Testnet => serializer.write_unsigned_integer(0u64),
1569 NetworkIdKind::Mainnet => serializer.write_unsigned_integer(1u64),
1570 }
1571 }
1572}
1573
1574impl Deserialize for NetworkId {
1575 fn deserialize<R: BufRead + Seek>(raw: &mut Deserializer<R>) -> Result<Self, DeserializeError> {
1576 (|| -> Result<_, DeserializeError> {
1577 match raw.unsigned_integer()? {
1578 0 => Ok(NetworkId::testnet()),
1579 1 => Ok(NetworkId::mainnet()),
1580 _ => Err(DeserializeError::new(
1581 "NetworkId",
1582 DeserializeFailure::NoVariantMatched.into(),
1583 )),
1584 }
1585 })()
1586 .map_err(|e| e.annotate("NetworkId"))
1587 }
1588}