Skip to content

Commit

Permalink
Merge pull request #49 from multiversx/codecs-june-3
Browse files Browse the repository at this point in the history
Fix after review for parts 1 & 2
  • Loading branch information
andreibancioiu committed Jun 6, 2024
2 parents 058438f + 02ebcd2 commit a468a5d
Show file tree
Hide file tree
Showing 5 changed files with 17 additions and 13 deletions.
7 changes: 3 additions & 4 deletions multiversx_sdk/abi/codec.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@

import io
from typing import Any

from multiversx_sdk.abi.interface import SingleValue

Expand All @@ -14,20 +13,20 @@ def encode_nested(self, value: SingleValue) -> bytes:
value.encode_nested(buffer)
return buffer.getvalue()

def encode_top_level(self, value: Any) -> bytes:
def encode_top_level(self, value: SingleValue) -> bytes:
buffer = io.BytesIO()
value.encode_top_level(buffer)
return buffer.getvalue()

def decode_nested(self, data: bytes, value: Any) -> None:
def decode_nested(self, data: bytes, value: SingleValue) -> None:
reader = io.BytesIO(data)

try:
value.decode_nested(reader)
except ValueError as e:
raise ValueError(f"cannot decode (nested) {type(value)}, because of: {e}")

def decode_top_level(self, data: bytes, value: Any) -> None:
def decode_top_level(self, data: bytes, value: SingleValue) -> None:
try:
value.decode_top_level(data)
except ValueError as e:
Expand Down
2 changes: 2 additions & 0 deletions multiversx_sdk/abi/fields.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ class Field:
def __init__(self, name: str, value: SingleValue) -> None:
self.name = name
self.value = value


def encode_fields_nested(fields: List[Field], writer: io.BytesIO):
for field in fields:
try:
Expand Down
17 changes: 11 additions & 6 deletions multiversx_sdk/abi/serializer.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from typing import Any, List, Sequence

from multiversx_sdk.abi.codec import Codec
from multiversx_sdk.abi.interface import SingleValue
from multiversx_sdk.abi.parts import PartsHolder
from multiversx_sdk.abi.values_multi import *

Expand Down Expand Up @@ -30,7 +31,7 @@ def serialize_to_parts(self, input_values: Sequence[Any]) -> List[bytes]:
def _do_serialize(self, parts_holder: PartsHolder, input_values: Sequence[Any]):
for i, value in enumerate(input_values):
if value is None:
raise ValueError("cannot serialize nil value")
raise ValueError("cannot serialize null value")

if isinstance(value, OptionalValue):
if i != len(input_values) - 1:
Expand All @@ -48,11 +49,13 @@ def _do_serialize(self, parts_holder: PartsHolder, input_values: Sequence[Any]):
raise ValueError("variadic values must be last among input values")

self._do_serialize(parts_holder, value.items)
else:
elif isinstance(value, SingleValue):
parts_holder.append_empty_part()
self._serialize_single_value(parts_holder, value)
else:
raise ValueError(f"cannot serialize value of type: {type(value).__name__}")

def _serialize_single_value(self, parts_holder: PartsHolder, value: Any):
def _serialize_single_value(self, parts_holder: PartsHolder, value: SingleValue):
data = self.codec.encode_top_level(value)
parts_holder.append_to_last_part(data)

Expand All @@ -67,7 +70,7 @@ def deserialize_parts(self, parts: Sequence[bytes], output_values: Sequence[Any]
def _do_deserialize(self, parts_holder: PartsHolder, output_values: Sequence[Any]):
for i, value in enumerate(output_values):
if value is None:
raise ValueError("cannot deserialize into nil value")
raise ValueError("cannot deserialize into null value")

if isinstance(value, OptionalValue):
if i != len(output_values) - 1:
Expand All @@ -87,8 +90,10 @@ def _do_deserialize(self, parts_holder: PartsHolder, output_values: Sequence[Any
raise ValueError("variadic values must be last among output values")

self._deserialize_variadic_values(parts_holder, value)
else:
elif isinstance(value, SingleValue):
self._deserialize_single_value(parts_holder, value)
else:
raise ValueError(f"cannot deserialize value of type: {type(value).__name__}")

def _deserialize_variadic_values(self, parts_holder: PartsHolder, value: VariadicValues):
if value.item_creator is None:
Expand All @@ -101,7 +106,7 @@ def _deserialize_variadic_values(self, parts_holder: PartsHolder, value: Variadi

value.items.append(new_item)

def _deserialize_single_value(self, parts_holder: PartsHolder, value: Any):
def _deserialize_single_value(self, parts_holder: PartsHolder, value: SingleValue):
part = parts_holder.read_whole_focused_part()
self.codec.decode_top_level(part, value)
parts_holder.focus_on_next_part()
Expand Down
2 changes: 1 addition & 1 deletion multiversx_sdk/abi/serializer_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ def test_deserialize():
serializer = Serializer(parts_separator="@")

# nil destination
with pytest.raises(ValueError, match="^cannot deserialize into nil value$"):
with pytest.raises(ValueError, match="^cannot deserialize into null value$"):
serializer.deserialize("", [None])

# u8
Expand Down
2 changes: 0 additions & 2 deletions multiversx_sdk/abi/token_identifier_value.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@


from typing import Any

from multiversx_sdk.abi.string_value import StringValue
Expand Down

0 comments on commit a468a5d

Please sign in to comment.