tp_runtime/generic/
mod.rs1mod unchecked_extrinsic;
23mod era;
24mod checked_extrinsic;
25mod header;
26mod block;
27mod digest;
28#[cfg(test)]
29mod tests;
30
31pub use self::unchecked_extrinsic::{UncheckedExtrinsic, SignedPayload};
32pub use self::era::{Era, Phase};
33pub use self::checked_extrinsic::CheckedExtrinsic;
34pub use self::header::Header;
35pub use self::block::{Block, SignedBlock, BlockId};
36pub use self::digest::{
37 Digest, DigestItem, DigestItemRef, OpaqueDigestItemId, ChangesTrieSignal,
38};
39
40use crate::codec::Encode;
41use tetcore_std::prelude::*;
42
43fn encode_with_vec_prefix<T: Encode, F: Fn(&mut Vec<u8>)>(encoder: F) -> Vec<u8> {
44 let size = ::tetcore_std::mem::size_of::<T>();
45 let reserve = match size {
46 0..=0b00111111 => 1,
47 0..=0b00111111_11111111 => 2,
48 _ => 4,
49 };
50 let mut v = Vec::with_capacity(reserve + size);
51 v.resize(reserve, 0);
52 encoder(&mut v);
53
54 let mut length: Vec<()> = Vec::new();
57 length.resize(v.len() - reserve, ());
58 length.using_encoded(|s| {
59 v.splice(0..reserve, s.iter().cloned());
60 });
61
62 v
63}