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 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
use crate::{ bytes::Bytes, core::{self, Capacity}, packed, prelude::*, H256, U256, }; impl Pack<packed::Uint64> for Capacity { fn pack(&self) -> packed::Uint64 { self.as_u64().pack() } } impl<'r> Unpack<core::Capacity> for packed::Uint64Reader<'r> { fn unpack(&self) -> core::Capacity { Capacity::shannons(self.unpack()) } } impl_conversion_for_entity_unpack!(Capacity, Uint64); impl Pack<packed::Uint256> for U256 { fn pack(&self) -> packed::Uint256 { packed::Uint256::from_slice(&self.to_le_bytes()[..]).expect("impossible: fail to pack U256") } } impl<'r> Unpack<U256> for packed::Uint256Reader<'r> { fn unpack(&self) -> U256 { U256::from_little_endian(self.as_slice()).expect("internal error: fail to unpack U256") } } impl_conversion_for_entity_unpack!(U256, Uint256); impl Pack<packed::Byte32> for H256 { fn pack(&self) -> packed::Byte32 { packed::Byte32::from_slice(self.as_bytes()).expect("impossible: fail to pack H256") } } impl<'r> Unpack<H256> for packed::Byte32Reader<'r> { fn unpack(&self) -> H256 { H256::from_slice(self.as_slice()).expect("internal error: fail to unpack H256") } } impl_conversion_for_entity_unpack!(H256, Byte32); impl Pack<packed::Byte32> for [u8; 32] { fn pack(&self) -> packed::Byte32 { packed::Byte32::from_slice(&self[..]).expect("impossible: fail to pack [u8; 32]") } } impl<'r> Unpack<[u8; 32]> for packed::Byte32Reader<'r> { fn unpack(&self) -> [u8; 32] { let ptr = self.as_slice().as_ptr() as *const [u8; 32]; unsafe { *ptr } } } impl_conversion_for_entity_unpack!([u8; 32], Byte32); impl Pack<packed::ProposalShortId> for [u8; 10] { fn pack(&self) -> packed::ProposalShortId { packed::ProposalShortId::from_slice(&self[..]) .expect("impossible: fail to pack to ProposalShortId") } } impl<'r> Unpack<[u8; 10]> for packed::ProposalShortIdReader<'r> { fn unpack(&self) -> [u8; 10] { let ptr = self.as_slice().as_ptr() as *const [u8; 10]; unsafe { *ptr } } } impl_conversion_for_entity_unpack!([u8; 10], ProposalShortId); impl Pack<packed::Bytes> for Bytes { fn pack(&self) -> packed::Bytes { let len = (self.len() as u32).to_le_bytes(); let mut v = Vec::with_capacity(4 + self.len()); v.extend_from_slice(&len[..]); v.extend_from_slice(&self[..]); packed::Bytes::new_unchecked(v.into()) } } impl<'r> Unpack<Bytes> for packed::BytesReader<'r> { fn unpack(&self) -> Bytes { Bytes::from(self.raw_data().to_owned()) } } impl Unpack<Bytes> for packed::Bytes { fn unpack(&self) -> Bytes { self.raw_data() } } impl Pack<packed::Uint64> for core::EpochNumberWithFraction { fn pack(&self) -> packed::Uint64 { self.full_value().pack() } } impl<'r> Unpack<core::EpochNumberWithFraction> for packed::Uint64Reader<'r> { fn unpack(&self) -> core::EpochNumberWithFraction { core::EpochNumberWithFraction::from_full_value(self.unpack()) } } impl_conversion_for_entity_unpack!(core::EpochNumberWithFraction, Uint64); impl_conversion_for_option!(H256, Byte32Opt, Byte32OptReader); impl_conversion_for_vector!(Capacity, Uint64Vec, Uint64VecReader); impl_conversion_for_vector!(Bytes, BytesVec, BytesVecReader); impl_conversion_for_packed_optional_pack!(Byte32, Byte32Opt); impl_conversion_for_packed_optional_pack!(CellOutput, CellOutputOpt); impl_conversion_for_packed_optional_pack!(Script, ScriptOpt); impl_conversion_for_packed_iterator_pack!(ProposalShortId, ProposalShortIdVec); impl_conversion_for_packed_iterator_pack!(Bytes, BytesVec); impl_conversion_for_packed_iterator_pack!(Transaction, TransactionVec); impl_conversion_for_packed_iterator_pack!(OutPoint, OutPointVec); impl_conversion_for_packed_iterator_pack!(CellDep, CellDepVec); impl_conversion_for_packed_iterator_pack!(CellOutput, CellOutputVec); impl_conversion_for_packed_iterator_pack!(CellInput, CellInputVec); impl_conversion_for_packed_iterator_pack!(UncleBlock, UncleBlockVec); impl_conversion_for_packed_iterator_pack!(Header, HeaderVec); impl_conversion_for_packed_iterator_pack!(Byte32, Byte32Vec);