1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
pub use molecule::{
hex_string,
prelude::{Builder, Entity, Reader},
};
pub use crate::utilities::merkle_mountain_range::ProverMessageBuilder;
pub trait ShouldBeOk<T> {
fn should_be_ok(self) -> T;
}
impl<T> ShouldBeOk<T> for Option<T> {
fn should_be_ok(self) -> T {
self.unwrap_or_else(|| panic!("should not be None"))
}
}
impl<T> ShouldBeOk<T> for molecule::error::VerificationResult<T> {
fn should_be_ok(self) -> T {
self.unwrap_or_else(|err| panic!("verify slice should be ok, but {}", err))
}
}
pub trait FromSliceShouldBeOk<'r>: Reader<'r> {
fn from_slice_should_be_ok(slice: &'r [u8]) -> Self;
}
impl<'r, R> FromSliceShouldBeOk<'r> for R
where
R: Reader<'r>,
{
fn from_slice_should_be_ok(slice: &'r [u8]) -> Self {
match Self::from_slice(slice) {
Ok(ret) => ret,
Err(err) => panic!(
"failed to convert from slice: reason: {}; data: 0x{}.",
err,
hex_string(slice)
),
}
}
}
pub trait Unpack<T> {
fn unpack(&self) -> T;
}
pub trait Pack<T: Entity> {
fn pack(&self) -> T;
}
pub trait PackVec<T: Entity, I: Entity>: IntoIterator<Item = I> {
fn pack(self) -> T;
}