refactoring of impl_decodable_for_uint
This commit is contained in:
parent
ba65bdfc6a
commit
9c1d34253a
@ -8,20 +8,20 @@ use super::{
|
|||||||
macro_rules! impl_decodable_for_uint {
|
macro_rules! impl_decodable_for_uint {
|
||||||
($type: ident, $bit_size: expr) => {
|
($type: ident, $bit_size: expr) => {
|
||||||
impl Decodable for $type {
|
impl Decodable for $type {
|
||||||
fn ssz_decode(bytes: &[u8], index: usize)
|
fn ssz_decode(bytes: &[u8], start_bytes: usize)
|
||||||
-> Result<(Self, usize), DecodeError>
|
-> Result<(Self, usize), DecodeError>
|
||||||
{
|
{
|
||||||
assert!((0 < $bit_size) &
|
assert!((0 < $bit_size) &
|
||||||
($bit_size <= 64) &
|
($bit_size <= 64) &
|
||||||
($bit_size % 8 == 0));
|
($bit_size % 8 == 0));
|
||||||
let max_bytes = $bit_size / 8;
|
let max_bytes = $bit_size / 8;
|
||||||
if bytes.len() >= (index + max_bytes) {
|
if bytes.len() >= (start_bytes + max_bytes) {
|
||||||
let end_bytes = index + max_bytes;
|
let end_bytes = start_bytes + max_bytes;
|
||||||
let mut result: $type = 0;
|
let mut result: $type = 0;
|
||||||
for i in index..end_bytes {
|
for (index, byte) in bytes.iter().enumerate().take(end_bytes).skip(start_bytes) {
|
||||||
let offset = ((index + max_bytes) - i - 1) * 8;
|
let offset = (end_bytes - index - 1) * 8;
|
||||||
result |= ($type::from(bytes[i])) << offset;
|
result |= ($type::from(*byte)) << offset;
|
||||||
};
|
}
|
||||||
Ok((result, end_bytes))
|
Ok((result, end_bytes))
|
||||||
} else {
|
} else {
|
||||||
Err(DecodeError::TooShort)
|
Err(DecodeError::TooShort)
|
||||||
|
@ -35,7 +35,7 @@ macro_rules! impl_encodable_for_uint {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Append bytes to the SszStream
|
// Append bytes to the SszStream
|
||||||
s.append_encoded_raw(&mut buf.to_vec());
|
s.append_encoded_raw(&buf.to_vec());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user