Skip to content

Commit

Permalink
Merge pull request #304 from ElrondNetwork/elrond-codec-refactor-2
Browse files Browse the repository at this point in the history
Elrond codec refactor - part 2
  • Loading branch information
alyn509 authored Aug 6, 2021
2 parents d62b299 + 4dd1b25 commit c0f290e
Show file tree
Hide file tree
Showing 26 changed files with 1,368 additions and 1,285 deletions.
4 changes: 4 additions & 0 deletions elrond-codec/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -24,3 +24,7 @@ optional = true
[dependencies]
wee_alloc = "0.4"
arrayvec = { version = "0.7.1", default-features = false }

[dev-dependencies.elrond-codec-derive]
path = "../elrond-codec-derive"
version = "=0.5.3"
8 changes: 3 additions & 5 deletions elrond-codec/src/impl_for_types/impl_array.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
use crate::codec_err::{DecodeError, EncodeError};
use crate::nested_de::NestedDecode;
use crate::nested_de_input::NestedDecodeInput;
use crate::nested_ser::{
dep_encode_slice_contents, dep_encode_slice_contents_or_exit, NestedEncode,
};
use crate::nested_ser::NestedEncode;
use crate::nested_ser_output::NestedEncodeOutput;
use crate::top_de::{top_decode_from_nested, top_decode_from_nested_or_exit, TopDecode};
use crate::top_de_input::TopDecodeInput;
Expand All @@ -16,7 +14,7 @@ use arrayvec::ArrayVec;
impl<T: NestedEncode, const N: usize> NestedEncode for [T; N] {
#[inline]
fn dep_encode<O: NestedEncodeOutput>(&self, dest: &mut O) -> Result<(), EncodeError> {
dep_encode_slice_contents(&self[..], dest)
super::impl_slice::dep_encode_slice_contents(&self[..], dest)
}

#[inline]
Expand All @@ -26,7 +24,7 @@ impl<T: NestedEncode, const N: usize> NestedEncode for [T; N] {
c: ExitCtx,
exit: fn(ExitCtx, EncodeError) -> !,
) {
dep_encode_slice_contents_or_exit(&self[..], dest, c, exit);
super::impl_slice::dep_encode_slice_contents_or_exit(&self[..], dest, c, exit);
}
}

Expand Down
71 changes: 71 additions & 0 deletions elrond-codec/src/impl_for_types/impl_bool.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,74 @@
use crate::codec_err::{DecodeError, EncodeError};
use crate::nested_de::NestedDecode;
use crate::nested_de_input::NestedDecodeInput;
use crate::nested_ser::{NestedEncode, NestedEncodeNoErr};
use crate::nested_ser_output::NestedEncodeOutput;
use crate::top_de::TopDecode;
use crate::top_de_input::TopDecodeInput;
use crate::top_ser::{TopEncode, TopEncodeNoErr};
use crate::top_ser_output::TopEncodeOutput;
use crate::{dep_encode_from_no_err, dep_encode_num_mimic, top_encode_from_no_err, TypeInfo};

impl TopEncodeNoErr for bool {
fn top_encode_no_err<O: TopEncodeOutput>(&self, output: O) {
// only using signed because this one is implemented in Arwen, unsigned is not
// TODO: change to set_u64
output.set_i64(if *self { 1i64 } else { 0i64 });
}
}

top_encode_from_no_err! {bool, TypeInfo::Bool}

impl TopDecode for bool {
const TYPE_INFO: TypeInfo = TypeInfo::Bool;

fn top_decode<I: TopDecodeInput>(input: I) -> Result<Self, DecodeError> {
match input.into_u64() {
0 => Ok(false),
1 => Ok(true),
_ => Err(DecodeError::INPUT_OUT_OF_RANGE),
}
}

fn top_decode_or_exit<I: TopDecodeInput, ExitCtx: Clone>(
input: I,
c: ExitCtx,
exit: fn(ExitCtx, DecodeError) -> !,
) -> Self {
match input.into_u64() {
0 => false,
1 => true,
_ => exit(c, DecodeError::INPUT_OUT_OF_RANGE),
}
}
}

dep_encode_num_mimic! {bool, u8, TypeInfo::Bool}

impl NestedDecode for bool {
const TYPE_INFO: TypeInfo = TypeInfo::Bool;

fn dep_decode<I: NestedDecodeInput>(input: &mut I) -> Result<Self, DecodeError> {
match input.read_byte()? {
0 => Ok(false),
1 => Ok(true),
_ => Err(DecodeError::INVALID_VALUE),
}
}

fn dep_decode_or_exit<I: NestedDecodeInput, ExitCtx: Clone>(
input: &mut I,
c: ExitCtx,
exit: fn(ExitCtx, DecodeError) -> !,
) -> Self {
match input.read_byte_or_exit(c.clone(), exit) {
0 => false,
1 => true,
_ => exit(c, DecodeError::INVALID_VALUE),
}
}
}

#[cfg(test)]
pub mod tests {
use crate::test_util::{check_dep_encode_decode, check_top_encode_decode};
Expand Down
77 changes: 0 additions & 77 deletions elrond-codec/src/impl_for_types/impl_decode_num_signed.rs

This file was deleted.

74 changes: 0 additions & 74 deletions elrond-codec/src/impl_for_types/impl_decode_num_unsigned.rs

This file was deleted.

33 changes: 0 additions & 33 deletions elrond-codec/src/impl_for_types/impl_dep_encode_from_no_err.rs

This file was deleted.

28 changes: 0 additions & 28 deletions elrond-codec/src/impl_for_types/impl_encode_num_mimic.rs

This file was deleted.

25 changes: 0 additions & 25 deletions elrond-codec/src/impl_for_types/impl_encode_num_signed.rs

This file was deleted.

45 changes: 0 additions & 45 deletions elrond-codec/src/impl_for_types/impl_encode_num_unsigned.rs

This file was deleted.

Loading

0 comments on commit c0f290e

Please sign in to comment.