1use crate::byron::ByronAny;
5
6use super::*;
7use cbor_event;
8use cbor_event::de::Deserializer;
9use cbor_event::se::Serializer;
10use cml_chain::utils::BigInteger;
11use cml_core::error::*;
12use cml_core::serialization::*;
13use cml_crypto::RawBytesEncoding;
14use std::io::{BufRead, Seek, Write};
15
16impl cbor_event::se::Serialize for Bvermod {
17 fn serialize<'se, W: Write>(
18 &self,
19 serializer: &'se mut Serializer<W>,
20 ) -> cbor_event::Result<&'se mut Serializer<W>> {
21 serializer.write_array(cbor_event::Len::Len(14))?;
22 serializer.write_array(cbor_event::Len::Len(self.script_version.len() as u64))?;
23 for element in self.script_version.iter() {
24 serializer.write_unsigned_integer(*element as u64)?;
25 }
26 serializer.write_array(cbor_event::Len::Len(self.slot_duration.len() as u64))?;
27 for element in self.slot_duration.iter() {
28 cml_core::serialization::Serialize::serialize(element, serializer, true)?;
30 }
31 serializer.write_array(cbor_event::Len::Len(self.max_block_size.len() as u64))?;
32 for element in self.max_block_size.iter() {
33 cml_core::serialization::Serialize::serialize(element, serializer, true)?;
35 }
36 serializer.write_array(cbor_event::Len::Len(self.max_header_size.len() as u64))?;
37 for element in self.max_header_size.iter() {
38 cml_core::serialization::Serialize::serialize(element, serializer, true)?;
40 }
41 serializer.write_array(cbor_event::Len::Len(self.max_tx_size.len() as u64))?;
42 for element in self.max_tx_size.iter() {
43 cml_core::serialization::Serialize::serialize(element, serializer, true)?;
45 }
46 serializer.write_array(cbor_event::Len::Len(self.max_proposal_size.len() as u64))?;
47 for element in self.max_proposal_size.iter() {
48 cml_core::serialization::Serialize::serialize(element, serializer, true)?;
50 }
51 serializer.write_array(cbor_event::Len::Len(self.mpc_thd.len() as u64))?;
52 for element in self.mpc_thd.iter() {
53 serializer.write_unsigned_integer(*element)?;
54 }
55 serializer.write_array(cbor_event::Len::Len(self.heavy_del_thd.len() as u64))?;
56 for element in self.heavy_del_thd.iter() {
57 serializer.write_unsigned_integer(*element)?;
58 }
59 serializer.write_array(cbor_event::Len::Len(self.update_vote_thd.len() as u64))?;
60 for element in self.update_vote_thd.iter() {
61 serializer.write_unsigned_integer(*element)?;
62 }
63 serializer.write_array(cbor_event::Len::Len(self.update_proposal_thd.len() as u64))?;
64 for element in self.update_proposal_thd.iter() {
65 serializer.write_unsigned_integer(*element)?;
66 }
67 serializer.write_array(cbor_event::Len::Len(self.update_implicit.len() as u64))?;
68 for element in self.update_implicit.iter() {
69 serializer.write_unsigned_integer(*element)?;
70 }
71 serializer.write_array(cbor_event::Len::Len(self.soft_fork_rule.len() as u64))?;
72 for element in self.soft_fork_rule.iter() {
73 element.serialize(serializer)?;
74 }
75 serializer.write_array(cbor_event::Len::Len(self.tx_fee_policy.len() as u64))?;
76 for element in self.tx_fee_policy.iter() {
77 element.serialize(serializer)?;
78 }
79 serializer.write_array(cbor_event::Len::Len(self.unlock_stake_epoch.len() as u64))?;
80 for element in self.unlock_stake_epoch.iter() {
81 serializer.write_unsigned_integer(*element)?;
82 }
83 Ok(serializer)
84 }
85}
86
87impl Deserialize for Bvermod {
88 fn deserialize<R: BufRead + Seek>(raw: &mut Deserializer<R>) -> Result<Self, DeserializeError> {
89 let len = raw.array()?;
90 let mut read_len = CBORReadLen::from(len);
91 read_len.read_elems(14)?;
92 read_len.finish()?;
93 (|| -> Result<_, DeserializeError> {
94 let script_version = (|| -> Result<_, DeserializeError> {
95 let mut script_version_arr = Vec::new();
96 let len = raw.array()?;
97 while match len {
98 cbor_event::Len::Len(n) => (script_version_arr.len() as u64) < n,
99 cbor_event::Len::Indefinite => true,
100 } {
101 if raw.cbor_type()? == cbor_event::Type::Special {
102 assert_eq!(raw.special()?, cbor_event::Special::Break);
103 break;
104 }
105 script_version_arr.push(raw.unsigned_integer()? as u16);
106 }
107 Ok(script_version_arr)
108 })()
109 .map_err(|e| e.annotate("script_version"))?;
110 let slot_duration = (|| -> Result<_, DeserializeError> {
111 let mut slot_duration_arr = Vec::new();
112 let len = raw.array()?;
113 while match len {
114 cbor_event::Len::Len(n) => (slot_duration_arr.len() as u64) < n,
115 cbor_event::Len::Indefinite => true,
116 } {
117 if raw.cbor_type()? == cbor_event::Type::Special {
118 assert_eq!(raw.special()?, cbor_event::Special::Break);
119 break;
120 }
121 slot_duration_arr.push(BigInteger::deserialize(raw)?);
122 }
123 Ok(slot_duration_arr)
124 })()
125 .map_err(|e| e.annotate("slot_duration"))?;
126 let max_block_size = (|| -> Result<_, DeserializeError> {
127 let mut max_block_size_arr = Vec::new();
128 let len = raw.array()?;
129 while match len {
130 cbor_event::Len::Len(n) => (max_block_size_arr.len() as u64) < n,
131 cbor_event::Len::Indefinite => true,
132 } {
133 if raw.cbor_type()? == cbor_event::Type::Special {
134 assert_eq!(raw.special()?, cbor_event::Special::Break);
135 break;
136 }
137 max_block_size_arr.push(BigInteger::deserialize(raw)?);
138 }
139 Ok(max_block_size_arr)
140 })()
141 .map_err(|e| e.annotate("max_block_size"))?;
142 let max_header_size = (|| -> Result<_, DeserializeError> {
143 let mut max_header_size_arr = Vec::new();
144 let len = raw.array()?;
145 while match len {
146 cbor_event::Len::Len(n) => (max_header_size_arr.len() as u64) < n,
147 cbor_event::Len::Indefinite => true,
148 } {
149 if raw.cbor_type()? == cbor_event::Type::Special {
150 assert_eq!(raw.special()?, cbor_event::Special::Break);
151 break;
152 }
153 max_header_size_arr.push(BigInteger::deserialize(raw)?);
154 }
155 Ok(max_header_size_arr)
156 })()
157 .map_err(|e| e.annotate("max_header_size"))?;
158 let max_tx_size = (|| -> Result<_, DeserializeError> {
159 let mut max_tx_size_arr = Vec::new();
160 let len = raw.array()?;
161 while match len {
162 cbor_event::Len::Len(n) => (max_tx_size_arr.len() as u64) < n,
163 cbor_event::Len::Indefinite => true,
164 } {
165 if raw.cbor_type()? == cbor_event::Type::Special {
166 assert_eq!(raw.special()?, cbor_event::Special::Break);
167 break;
168 }
169 max_tx_size_arr.push(BigInteger::deserialize(raw)?);
170 }
171 Ok(max_tx_size_arr)
172 })()
173 .map_err(|e| e.annotate("max_tx_size"))?;
174 let max_proposal_size = (|| -> Result<_, DeserializeError> {
175 let mut max_proposal_size_arr = Vec::new();
176 let len = raw.array()?;
177 while match len {
178 cbor_event::Len::Len(n) => (max_proposal_size_arr.len() as u64) < n,
179 cbor_event::Len::Indefinite => true,
180 } {
181 if raw.cbor_type()? == cbor_event::Type::Special {
182 assert_eq!(raw.special()?, cbor_event::Special::Break);
183 break;
184 }
185 max_proposal_size_arr.push(BigInteger::deserialize(raw)?);
186 }
187 Ok(max_proposal_size_arr)
188 })()
189 .map_err(|e| e.annotate("max_proposal_size"))?;
190 let mpc_thd = (|| -> Result<_, DeserializeError> {
191 let mut mpc_thd_arr = Vec::new();
192 let len = raw.array()?;
193 while match len {
194 cbor_event::Len::Len(n) => (mpc_thd_arr.len() as u64) < n,
195 cbor_event::Len::Indefinite => true,
196 } {
197 if raw.cbor_type()? == cbor_event::Type::Special {
198 assert_eq!(raw.special()?, cbor_event::Special::Break);
199 break;
200 }
201 mpc_thd_arr.push(raw.unsigned_integer()?);
202 }
203 Ok(mpc_thd_arr)
204 })()
205 .map_err(|e| e.annotate("mpc_thd"))?;
206 let heavy_del_thd = (|| -> Result<_, DeserializeError> {
207 let mut heavy_del_thd_arr = Vec::new();
208 let len = raw.array()?;
209 while match len {
210 cbor_event::Len::Len(n) => (heavy_del_thd_arr.len() as u64) < n,
211 cbor_event::Len::Indefinite => true,
212 } {
213 if raw.cbor_type()? == cbor_event::Type::Special {
214 assert_eq!(raw.special()?, cbor_event::Special::Break);
215 break;
216 }
217 heavy_del_thd_arr.push(raw.unsigned_integer()?);
218 }
219 Ok(heavy_del_thd_arr)
220 })()
221 .map_err(|e| e.annotate("heavy_del_thd"))?;
222 let update_vote_thd = (|| -> Result<_, DeserializeError> {
223 let mut update_vote_thd_arr = Vec::new();
224 let len = raw.array()?;
225 while match len {
226 cbor_event::Len::Len(n) => (update_vote_thd_arr.len() as u64) < n,
227 cbor_event::Len::Indefinite => true,
228 } {
229 if raw.cbor_type()? == cbor_event::Type::Special {
230 assert_eq!(raw.special()?, cbor_event::Special::Break);
231 break;
232 }
233 update_vote_thd_arr.push(raw.unsigned_integer()?);
234 }
235 Ok(update_vote_thd_arr)
236 })()
237 .map_err(|e| e.annotate("update_vote_thd"))?;
238 let update_proposal_thd = (|| -> Result<_, DeserializeError> {
239 let mut update_proposal_thd_arr = Vec::new();
240 let len = raw.array()?;
241 while match len {
242 cbor_event::Len::Len(n) => (update_proposal_thd_arr.len() as u64) < n,
243 cbor_event::Len::Indefinite => true,
244 } {
245 if raw.cbor_type()? == cbor_event::Type::Special {
246 assert_eq!(raw.special()?, cbor_event::Special::Break);
247 break;
248 }
249 update_proposal_thd_arr.push(raw.unsigned_integer()?);
250 }
251 Ok(update_proposal_thd_arr)
252 })()
253 .map_err(|e| e.annotate("update_proposal_thd"))?;
254 let update_implicit = (|| -> Result<_, DeserializeError> {
255 let mut update_implicit_arr = Vec::new();
256 let len = raw.array()?;
257 while match len {
258 cbor_event::Len::Len(n) => (update_implicit_arr.len() as u64) < n,
259 cbor_event::Len::Indefinite => true,
260 } {
261 if raw.cbor_type()? == cbor_event::Type::Special {
262 assert_eq!(raw.special()?, cbor_event::Special::Break);
263 break;
264 }
265 update_implicit_arr.push(raw.unsigned_integer()?);
266 }
267 Ok(update_implicit_arr)
268 })()
269 .map_err(|e| e.annotate("update_implicit"))?;
270 let soft_fork_rule = (|| -> Result<_, DeserializeError> {
271 let mut soft_fork_rule_arr = Vec::new();
272 let len = raw.array()?;
273 while match len {
274 cbor_event::Len::Len(n) => (soft_fork_rule_arr.len() as u64) < n,
275 cbor_event::Len::Indefinite => true,
276 } {
277 if raw.cbor_type()? == cbor_event::Type::Special {
278 assert_eq!(raw.special()?, cbor_event::Special::Break);
279 break;
280 }
281 soft_fork_rule_arr.push(SoftForkRule::deserialize(raw)?);
282 }
283 Ok(soft_fork_rule_arr)
284 })()
285 .map_err(|e| e.annotate("soft_fork_rule"))?;
286 let tx_fee_policy = (|| -> Result<_, DeserializeError> {
287 let mut tx_fee_policy_arr = Vec::new();
288 let len = raw.array()?;
289 while match len {
290 cbor_event::Len::Len(n) => (tx_fee_policy_arr.len() as u64) < n,
291 cbor_event::Len::Indefinite => true,
292 } {
293 if raw.cbor_type()? == cbor_event::Type::Special {
294 assert_eq!(raw.special()?, cbor_event::Special::Break);
295 break;
296 }
297 tx_fee_policy_arr.push(ByronTxFeePolicy::deserialize(raw)?);
298 }
299 Ok(tx_fee_policy_arr)
300 })()
301 .map_err(|e| e.annotate("tx_fee_policy"))?;
302 let unlock_stake_epoch = (|| -> Result<_, DeserializeError> {
303 let mut unlock_stake_epoch_arr = Vec::new();
304 let len = raw.array()?;
305 while match len {
306 cbor_event::Len::Len(n) => (unlock_stake_epoch_arr.len() as u64) < n,
307 cbor_event::Len::Indefinite => true,
308 } {
309 if raw.cbor_type()? == cbor_event::Type::Special {
310 assert_eq!(raw.special()?, cbor_event::Special::Break);
311 break;
312 }
313 unlock_stake_epoch_arr.push(raw.unsigned_integer()?);
314 }
315 Ok(unlock_stake_epoch_arr)
316 })()
317 .map_err(|e| e.annotate("unlock_stake_epoch"))?;
318 match len {
319 cbor_event::Len::Len(_) => (),
320 cbor_event::Len::Indefinite => match raw.special()? {
321 cbor_event::Special::Break => (),
322 _ => return Err(DeserializeFailure::EndingBreakMissing.into()),
323 },
324 }
325 Ok(Bvermod {
326 script_version,
327 slot_duration,
328 max_block_size,
329 max_header_size,
330 max_tx_size,
331 max_proposal_size,
332 mpc_thd,
333 heavy_del_thd,
334 update_vote_thd,
335 update_proposal_thd,
336 update_implicit,
337 soft_fork_rule,
338 tx_fee_policy,
339 unlock_stake_epoch,
340 })
341 })()
342 .map_err(|e| e.annotate("Bvermod"))
343 }
344}
345
346impl cbor_event::se::Serialize for ByronBlockVersion {
347 fn serialize<'se, W: Write>(
348 &self,
349 serializer: &'se mut Serializer<W>,
350 ) -> cbor_event::Result<&'se mut Serializer<W>> {
351 serializer.write_array(cbor_event::Len::Len(3))?;
352 serializer.write_unsigned_integer(self.u16 as u64)?;
353 serializer.write_unsigned_integer(self.u162 as u64)?;
354 serializer.write_unsigned_integer(self.u8 as u64)?;
355 Ok(serializer)
356 }
357}
358
359impl Deserialize for ByronBlockVersion {
360 fn deserialize<R: BufRead + Seek>(raw: &mut Deserializer<R>) -> Result<Self, DeserializeError> {
361 let len = raw.array()?;
362 let mut read_len = CBORReadLen::from(len);
363 read_len.read_elems(3)?;
364 read_len.finish()?;
365 (|| -> Result<_, DeserializeError> {
366 let u16 = Ok(raw.unsigned_integer()? as u16)
367 .map_err(|e: DeserializeError| e.annotate("u16"))?;
368 let u162 = Ok(raw.unsigned_integer()? as u16)
369 .map_err(|e: DeserializeError| e.annotate("u162"))?;
370 let u8 = Ok(raw.unsigned_integer()? as u8)
371 .map_err(|e: DeserializeError| e.annotate("u8"))?;
372 match len {
373 cbor_event::Len::Len(_) => (),
374 cbor_event::Len::Indefinite => match raw.special()? {
375 cbor_event::Special::Break => (),
376 _ => return Err(DeserializeFailure::EndingBreakMissing.into()),
377 },
378 }
379 Ok(ByronBlockVersion { u16, u162, u8 })
380 })()
381 .map_err(|e| e.annotate("ByronBlockVersion"))
382 }
383}
384
385impl cbor_event::se::Serialize for ByronSoftwareVersion {
386 fn serialize<'se, W: Write>(
387 &self,
388 serializer: &'se mut Serializer<W>,
389 ) -> cbor_event::Result<&'se mut Serializer<W>> {
390 serializer.write_array(cbor_event::Len::Len(2))?;
391 serializer.write_text(&self.application_name)?;
392 serializer.write_unsigned_integer(self.u32 as u64)?;
393 Ok(serializer)
394 }
395}
396
397impl Deserialize for ByronSoftwareVersion {
398 fn deserialize<R: BufRead + Seek>(raw: &mut Deserializer<R>) -> Result<Self, DeserializeError> {
399 let len = raw.array()?;
400 let mut read_len = CBORReadLen::from(len);
401 read_len.read_elems(2)?;
402 read_len.finish()?;
403 (|| -> Result<_, DeserializeError> {
404 let application_name = Ok(raw.text()? as String)
405 .map_err(|e: DeserializeError| e.annotate("application_name"))?;
406 let u32 = Ok(raw.unsigned_integer()? as u32)
407 .map_err(|e: DeserializeError| e.annotate("u32"))?;
408 match len {
409 cbor_event::Len::Len(_) => (),
410 cbor_event::Len::Indefinite => match raw.special()? {
411 cbor_event::Special::Break => (),
412 _ => return Err(DeserializeFailure::EndingBreakMissing.into()),
413 },
414 }
415 Ok(ByronSoftwareVersion {
416 application_name,
417 u32,
418 })
419 })()
420 .map_err(|e| e.annotate("ByronSoftwareVersion"))
421 }
422}
423
424impl cbor_event::se::Serialize for ByronTxFeePolicy {
425 fn serialize<'se, W: Write>(
426 &self,
427 serializer: &'se mut Serializer<W>,
428 ) -> cbor_event::Result<&'se mut Serializer<W>> {
429 serializer.write_array(cbor_event::Len::Len(2))?;
430 serializer.write_unsigned_integer(0u64)?;
431 serializer.write_tag(24u64)?;
432 let mut index_1_inner_se = Serializer::new_vec();
433 self.index_1.serialize(&mut index_1_inner_se)?;
434 let index_1_bytes = index_1_inner_se.finalize();
435 serializer.write_bytes(&index_1_bytes)?;
436 Ok(serializer)
437 }
438}
439
440impl Deserialize for ByronTxFeePolicy {
441 fn deserialize<R: BufRead + Seek>(raw: &mut Deserializer<R>) -> Result<Self, DeserializeError> {
442 let len = raw.array()?;
443 let mut read_len = CBORReadLen::from(len);
444 read_len.read_elems(2)?;
445 read_len.finish()?;
446 (|| -> Result<_, DeserializeError> {
447 (|| -> Result<_, DeserializeError> {
448 let index_0_value = raw.unsigned_integer()?;
449 if index_0_value != 0 {
450 return Err(DeserializeFailure::FixedValueMismatch {
451 found: Key::Uint(index_0_value),
452 expected: Key::Uint(0),
453 }
454 .into());
455 }
456 Ok(())
457 })()
458 .map_err(|e| e.annotate("index_0"))?;
459 let index_1 = (|| -> Result<_, DeserializeError> {
460 match raw.tag()? {
461 24 => {
462 let index_1_bytes = raw.bytes()?;
463 let inner_de = &mut Deserializer::from(std::io::Cursor::new(index_1_bytes));
464 StdFeePolicy::deserialize(inner_de)
465 }
466 tag => Err(DeserializeFailure::TagMismatch {
467 found: tag,
468 expected: 24,
469 }
470 .into()),
471 }
472 })()
473 .map_err(|e| e.annotate("index_1"))?;
474 match len {
475 cbor_event::Len::Len(_) => (),
476 cbor_event::Len::Indefinite => match raw.special()? {
477 cbor_event::Special::Break => (),
478 _ => return Err(DeserializeFailure::EndingBreakMissing.into()),
479 },
480 }
481 Ok(ByronTxFeePolicy { index_1 })
482 })()
483 .map_err(|e| e.annotate("ByronTxFeePolicy"))
484 }
485}
486
487impl cbor_event::se::Serialize for ByronUpdate {
488 fn serialize<'se, W: Write>(
489 &self,
490 serializer: &'se mut Serializer<W>,
491 ) -> cbor_event::Result<&'se mut Serializer<W>> {
492 serializer.write_array(cbor_event::Len::Len(2))?;
493 serializer.write_array(cbor_event::Len::Len(self.proposal.len() as u64))?;
494 for element in self.proposal.iter() {
495 element.serialize(serializer)?;
496 }
497 serializer.write_array(cbor_event::Len::Indefinite)?;
498 for element in self.votes.iter() {
500 element.serialize(serializer)?;
501 }
502 serializer.write_special(cbor_event::Special::Break)?;
503 Ok(serializer)
504 }
505}
506
507impl Deserialize for ByronUpdate {
508 fn deserialize<R: BufRead + Seek>(raw: &mut Deserializer<R>) -> Result<Self, DeserializeError> {
509 let len = raw.array()?;
510 let mut read_len = CBORReadLen::from(len);
511 read_len.read_elems(2)?;
512 read_len.finish()?;
513 (|| -> Result<_, DeserializeError> {
514 let proposal = (|| -> Result<_, DeserializeError> {
515 let mut proposal_arr = Vec::new();
516 let len = raw.array()?;
517 while match len {
518 cbor_event::Len::Len(n) => (proposal_arr.len() as u64) < n,
519 cbor_event::Len::Indefinite => true,
520 } {
521 if raw.cbor_type()? == cbor_event::Type::Special {
522 assert_eq!(raw.special()?, cbor_event::Special::Break);
523 break;
524 }
525 proposal_arr.push(ByronUpdateProposal::deserialize(raw)?);
526 }
527 Ok(proposal_arr)
528 })()
529 .map_err(|e| e.annotate("proposal"))?;
530 let votes = (|| -> Result<_, DeserializeError> {
531 let mut votes_arr = Vec::new();
532 let len = raw.array()?;
533 while match len {
534 cbor_event::Len::Len(n) => (votes_arr.len() as u64) < n,
535 cbor_event::Len::Indefinite => true,
536 } {
537 if raw.cbor_type()? == cbor_event::Type::Special {
538 assert_eq!(raw.special()?, cbor_event::Special::Break);
539 break;
540 }
541 votes_arr.push(ByronUpdateVote::deserialize(raw)?);
542 }
543 Ok(votes_arr)
544 })()
545 .map_err(|e| e.annotate("votes"))?;
546 match len {
547 cbor_event::Len::Len(_) => (),
548 cbor_event::Len::Indefinite => match raw.special()? {
549 cbor_event::Special::Break => (),
550 _ => return Err(DeserializeFailure::EndingBreakMissing.into()),
551 },
552 }
553 Ok(ByronUpdate { proposal, votes })
554 })()
555 .map_err(|e| e.annotate("ByronUpdate"))
556 }
557}
558
559impl cbor_event::se::Serialize for ByronUpdateData {
560 fn serialize<'se, W: Write>(
561 &self,
562 serializer: &'se mut Serializer<W>,
563 ) -> cbor_event::Result<&'se mut Serializer<W>> {
564 serializer.write_array(cbor_event::Len::Len(4))?;
565 serializer.write_bytes(self.blake2b256.to_raw_bytes())?;
566 serializer.write_bytes(self.blake2b2562.to_raw_bytes())?;
567 serializer.write_bytes(self.blake2b2563.to_raw_bytes())?;
568 serializer.write_bytes(self.blake2b2564.to_raw_bytes())?;
569 Ok(serializer)
570 }
571}
572
573impl Deserialize for ByronUpdateData {
574 fn deserialize<R: BufRead + Seek>(raw: &mut Deserializer<R>) -> Result<Self, DeserializeError> {
575 let len = raw.array()?;
576 let mut read_len = CBORReadLen::from(len);
577 read_len.read_elems(4)?;
578 read_len.finish()?;
579 (|| -> Result<_, DeserializeError> {
580 let blake2b256 = raw
581 .bytes()
582 .map_err(Into::<DeserializeError>::into)
583 .and_then(|bytes| {
584 Blake2b256::from_raw_bytes(&bytes)
585 .map_err(|e| DeserializeFailure::InvalidStructure(Box::new(e)).into())
586 })
587 .map_err(|e: DeserializeError| e.annotate("blake2b256"))?;
588 let blake2b2562 = raw
589 .bytes()
590 .map_err(Into::<DeserializeError>::into)
591 .and_then(|bytes| {
592 Blake2b256::from_raw_bytes(&bytes)
593 .map_err(|e| DeserializeFailure::InvalidStructure(Box::new(e)).into())
594 })
595 .map_err(|e: DeserializeError| e.annotate("blake2b2562"))?;
596 let blake2b2563 = raw
597 .bytes()
598 .map_err(Into::<DeserializeError>::into)
599 .and_then(|bytes| {
600 Blake2b256::from_raw_bytes(&bytes)
601 .map_err(|e| DeserializeFailure::InvalidStructure(Box::new(e)).into())
602 })
603 .map_err(|e: DeserializeError| e.annotate("blake2b2563"))?;
604 let blake2b2564 = raw
605 .bytes()
606 .map_err(Into::<DeserializeError>::into)
607 .and_then(|bytes| {
608 Blake2b256::from_raw_bytes(&bytes)
609 .map_err(|e| DeserializeFailure::InvalidStructure(Box::new(e)).into())
610 })
611 .map_err(|e: DeserializeError| e.annotate("blake2b2564"))?;
612 match len {
613 cbor_event::Len::Len(_) => (),
614 cbor_event::Len::Indefinite => match raw.special()? {
615 cbor_event::Special::Break => (),
616 _ => return Err(DeserializeFailure::EndingBreakMissing.into()),
617 },
618 }
619 Ok(ByronUpdateData {
620 blake2b256,
621 blake2b2562,
622 blake2b2563,
623 blake2b2564,
624 })
625 })()
626 .map_err(|e| e.annotate("ByronUpdateData"))
627 }
628}
629
630impl cbor_event::se::Serialize for ByronUpdateProposal {
631 fn serialize<'se, W: Write>(
632 &self,
633 serializer: &'se mut Serializer<W>,
634 ) -> cbor_event::Result<&'se mut Serializer<W>> {
635 serializer.write_array(cbor_event::Len::Len(7))?;
636 self.block_version.serialize(serializer)?;
637 self.block_version_mod.serialize(serializer)?;
638 self.software_version.serialize(serializer)?;
639 serializer.write_map(cbor_event::Len::Len(self.data.len() as u64))?;
640 for (key, value) in self.data.iter() {
641 serializer.write_text(key)?;
642 value.serialize(serializer)?;
643 }
644 serializer.write_map(cbor_event::Len::Len(self.byron_attributes.len() as u64))?;
645 for (key, value) in self.byron_attributes.iter() {
646 key.serialize(serializer)?;
647 value.serialize(serializer)?;
648 }
649 serializer.write_bytes(&self.from)?;
650 serializer.write_bytes(&self.signature)?;
651 Ok(serializer)
652 }
653}
654
655impl Deserialize for ByronUpdateProposal {
656 fn deserialize<R: BufRead + Seek>(raw: &mut Deserializer<R>) -> Result<Self, DeserializeError> {
657 let len = raw.array()?;
658 let mut read_len = CBORReadLen::from(len);
659 read_len.read_elems(7)?;
660 read_len.finish()?;
661 (|| -> Result<_, DeserializeError> {
662 let block_version = ByronBlockVersion::deserialize(raw)
663 .map_err(|e: DeserializeError| e.annotate("block_version"))?;
664 let block_version_mod = Bvermod::deserialize(raw)
665 .map_err(|e: DeserializeError| e.annotate("block_version_mod"))?;
666 let software_version = ByronSoftwareVersion::deserialize(raw)
667 .map_err(|e: DeserializeError| e.annotate("software_version"))?;
668 let data = (|| -> Result<_, DeserializeError> {
669 let mut data_table = BTreeMap::new();
670 let data_len = raw.map()?;
671 while match data_len {
672 cbor_event::Len::Len(n) => (data_table.len() as u64) < n,
673 cbor_event::Len::Indefinite => true,
674 } {
675 if raw.cbor_type()? == cbor_event::Type::Special {
676 assert_eq!(raw.special()?, cbor_event::Special::Break);
677 break;
678 }
679 let data_key = raw.text()? as String;
680 let data_value = ByronUpdateData::deserialize(raw)?;
681 if data_table.insert(data_key.clone(), data_value).is_some() {
682 return Err(DeserializeFailure::DuplicateKey(Key::Str(String::from(
683 "some complicated/unsupported type",
684 )))
685 .into());
686 }
687 }
688 Ok(data_table)
689 })()
690 .map_err(|e| e.annotate("data"))?;
691 let byron_attributes = (|| -> Result<_, DeserializeError> {
692 let mut byron_attributes_table = BTreeMap::new();
693 let byron_attributes_len = raw.map()?;
694 while match byron_attributes_len {
695 cbor_event::Len::Len(n) => (byron_attributes_table.len() as u64) < n,
696 cbor_event::Len::Indefinite => true,
697 } {
698 if raw.cbor_type()? == cbor_event::Type::Special {
699 assert_eq!(raw.special()?, cbor_event::Special::Break);
700 break;
701 }
702 let byron_attributes_key = ByronAny::deserialize(raw)?;
703 let byron_attributes_value = ByronAny::deserialize(raw)?;
704 if byron_attributes_table
705 .insert(byron_attributes_key.clone(), byron_attributes_value)
706 .is_some()
707 {
708 return Err(DeserializeFailure::DuplicateKey(Key::Str(String::from(
709 "some complicated/unsupported type",
710 )))
711 .into());
712 }
713 }
714 Ok(byron_attributes_table)
715 })()
716 .map_err(|e| e.annotate("byron_attributes"))?;
717 let from =
718 Ok(raw.bytes()? as Vec<u8>).map_err(|e: DeserializeError| e.annotate("from"))?;
719 let signature = Ok(raw.bytes()? as Vec<u8>)
720 .map_err(|e: DeserializeError| e.annotate("signature"))?;
721 match len {
722 cbor_event::Len::Len(_) => (),
723 cbor_event::Len::Indefinite => match raw.special()? {
724 cbor_event::Special::Break => (),
725 _ => return Err(DeserializeFailure::EndingBreakMissing.into()),
726 },
727 }
728 Ok(ByronUpdateProposal {
729 block_version,
730 block_version_mod,
731 software_version,
732 data,
733 byron_attributes,
734 from,
735 signature,
736 })
737 })()
738 .map_err(|e| e.annotate("ByronUpdateProposal"))
739 }
740}
741
742impl cbor_event::se::Serialize for ByronUpdateVote {
743 fn serialize<'se, W: Write>(
744 &self,
745 serializer: &'se mut Serializer<W>,
746 ) -> cbor_event::Result<&'se mut Serializer<W>> {
747 serializer.write_array(cbor_event::Len::Len(4))?;
748 serializer.write_bytes(&self.voter)?;
749 serializer.write_bytes(self.proposal_id.to_raw_bytes())?;
750 serializer.write_special(cbor_event::Special::Bool(self.vote))?;
751 serializer.write_bytes(&self.signature)?;
752 Ok(serializer)
753 }
754}
755
756impl Deserialize for ByronUpdateVote {
757 fn deserialize<R: BufRead + Seek>(raw: &mut Deserializer<R>) -> Result<Self, DeserializeError> {
758 let len = raw.array()?;
759 let mut read_len = CBORReadLen::from(len);
760 read_len.read_elems(4)?;
761 read_len.finish()?;
762 (|| -> Result<_, DeserializeError> {
763 let voter =
764 Ok(raw.bytes()? as Vec<u8>).map_err(|e: DeserializeError| e.annotate("voter"))?;
765 let proposal_id = raw
766 .bytes()
767 .map_err(Into::<DeserializeError>::into)
768 .and_then(|bytes| {
769 Blake2b256::from_raw_bytes(&bytes)
770 .map_err(|e| DeserializeFailure::InvalidStructure(Box::new(e)).into())
771 })
772 .map_err(|e: DeserializeError| e.annotate("proposal_id"))?;
773 let vote = raw
774 .bool()
775 .map_err(Into::into)
776 .map_err(|e: DeserializeError| e.annotate("vote"))?;
777 let signature = Ok(raw.bytes()? as Vec<u8>)
778 .map_err(|e: DeserializeError| e.annotate("signature"))?;
779 match len {
780 cbor_event::Len::Len(_) => (),
781 cbor_event::Len::Indefinite => match raw.special()? {
782 cbor_event::Special::Break => (),
783 _ => return Err(DeserializeFailure::EndingBreakMissing.into()),
784 },
785 }
786 Ok(ByronUpdateVote {
787 voter,
788 proposal_id,
789 vote,
790 signature,
791 })
792 })()
793 .map_err(|e| e.annotate("ByronUpdateVote"))
794 }
795}
796
797impl cbor_event::se::Serialize for SoftForkRule {
798 fn serialize<'se, W: Write>(
799 &self,
800 serializer: &'se mut Serializer<W>,
801 ) -> cbor_event::Result<&'se mut Serializer<W>> {
802 serializer.write_array(cbor_event::Len::Len(3))?;
803 serializer.write_unsigned_integer(self.coin_portion)?;
804 serializer.write_unsigned_integer(self.coin_portion2)?;
805 serializer.write_unsigned_integer(self.coin_portion3)?;
806 Ok(serializer)
807 }
808}
809
810impl Deserialize for SoftForkRule {
811 fn deserialize<R: BufRead + Seek>(raw: &mut Deserializer<R>) -> Result<Self, DeserializeError> {
812 let len = raw.array()?;
813 let mut read_len = CBORReadLen::from(len);
814 read_len.read_elems(3)?;
815 read_len.finish()?;
816 (|| -> Result<_, DeserializeError> {
817 let coin_portion = Ok(raw.unsigned_integer()?)
818 .map_err(|e: DeserializeError| e.annotate("coin_portion"))?;
819 let coin_portion2 = Ok(raw.unsigned_integer()?)
820 .map_err(|e: DeserializeError| e.annotate("coin_portion2"))?;
821 let coin_portion3 = Ok(raw.unsigned_integer()?)
822 .map_err(|e: DeserializeError| e.annotate("coin_portion3"))?;
823 match len {
824 cbor_event::Len::Len(_) => (),
825 cbor_event::Len::Indefinite => match raw.special()? {
826 cbor_event::Special::Break => (),
827 _ => return Err(DeserializeFailure::EndingBreakMissing.into()),
828 },
829 }
830 Ok(SoftForkRule {
831 coin_portion,
832 coin_portion2,
833 coin_portion3,
834 })
835 })()
836 .map_err(|e| e.annotate("SoftForkRule"))
837 }
838}
839
840impl cbor_event::se::Serialize for StdFeePolicy {
841 fn serialize<'se, W: Write>(
842 &self,
843 serializer: &'se mut Serializer<W>,
844 ) -> cbor_event::Result<&'se mut Serializer<W>> {
845 serializer.write_array(cbor_event::Len::Len(2))?;
846 cml_core::serialization::Serialize::serialize(&self.big_integer, serializer, true)?;
848 cml_core::serialization::Serialize::serialize(&self.big_integer2, serializer, true)?;
849
850 Ok(serializer)
851 }
852}
853
854impl Deserialize for StdFeePolicy {
855 fn deserialize<R: BufRead + Seek>(raw: &mut Deserializer<R>) -> Result<Self, DeserializeError> {
856 let len = raw.array()?;
857 let mut read_len = CBORReadLen::from(len);
858 read_len.read_elems(2)?;
859 read_len.finish()?;
860 (|| -> Result<_, DeserializeError> {
861 let big_integer = BigInteger::deserialize(raw)
862 .map_err(|e: DeserializeError| e.annotate("big_integer"))?;
863 let big_integer2 = BigInteger::deserialize(raw)
864 .map_err(|e: DeserializeError| e.annotate("big_integer2"))?;
865 match len {
866 cbor_event::Len::Len(_) => (),
867 cbor_event::Len::Indefinite => match raw.special()? {
868 cbor_event::Special::Break => (),
869 _ => return Err(DeserializeFailure::EndingBreakMissing.into()),
870 },
871 }
872 Ok(StdFeePolicy {
873 big_integer,
874 big_integer2,
875 })
876 })()
877 .map_err(|e| e.annotate("StdFeePolicy"))
878 }
879}