Add support for AvlTreeIds
This commit is contained in:
parent
0dc42bc601
commit
fc15e07470
|
@ -237,6 +237,9 @@ class MapTypeSpec(TypeSpec):
|
|||
type_key: TypeSpec
|
||||
type_value: TypeSpec
|
||||
|
||||
|
||||
|
||||
|
||||
@enforce_typing.enforce_types
|
||||
@dataclasses.dataclass(frozen=True, slots=True)
|
||||
class AvlTreeTypeSpec(MapTypeSpec):
|
||||
|
@ -252,8 +255,18 @@ class AvlTreeTypeSpec(MapTypeSpec):
|
|||
'''
|
||||
type_key = TypeSpec.read_from(reader)
|
||||
type_value = TypeSpec.read_from(reader)
|
||||
type_spec = AvlTreeTypeSpec(type_key, type_value)
|
||||
return type_spec
|
||||
return AvlTreeTypeSpec(type_key, type_value)
|
||||
|
||||
def read_element_from(self, reader: BinaryReader, type_env,
|
||||
mode: SerializeMode) -> 'AvlTreeId':
|
||||
avl_tree_id = SIZE_SIMPLE_TYPE_SPEC.read_element_from(reader, type_env, mode)
|
||||
return AvlTreeId(avl_tree_id, self)
|
||||
|
||||
@enforce_typing.enforce_types
|
||||
@dataclasses.dataclass(frozen=True, slots=True)
|
||||
class AvlTreeId:
|
||||
avl_tree_id: int
|
||||
type_spec: AvlTreeTypeSpec
|
||||
|
||||
@enforce_typing.enforce_types
|
||||
@dataclasses.dataclass(frozen=True, slots=True)
|
||||
|
@ -695,11 +708,13 @@ class ContractAbi:
|
|||
return self.named_types_by_id[type_name].read_element_from(
|
||||
rpc, self.named_types_by_idx, SerializeMode.RPC)
|
||||
|
||||
def read_state(self, reader: BinaryReader):
|
||||
def read_state(self, reader: BinaryReader | bytes, explicit_type: TypeSpec | None = None):
|
||||
if not isinstance(reader, BinaryReader):
|
||||
reader = BinaryReader(reader)
|
||||
|
||||
return self.state_type.read_element_from(reader, self.named_types_by_idx,
|
||||
explicit_type = explicit_type or self.state_type
|
||||
|
||||
return explicit_type.read_element_from(reader, self.named_types_by_idx,
|
||||
SerializeMode.STATE)
|
||||
|
||||
def get_fn_abi_from_shortname(self, shortname: int) -> FnAbi:
|
||||
|
@ -707,7 +722,7 @@ class ContractAbi:
|
|||
if derp.shortname == shortname:
|
||||
return derp
|
||||
|
||||
def read_invocation(self, reader: BinaryReader) -> ParsedInvocation:
|
||||
def read_invocation(self, reader: BinaryReader | bytes) -> ParsedInvocation:
|
||||
if not isinstance(reader, BinaryReader):
|
||||
reader = BinaryReader(reader)
|
||||
shortname = reader.readLeb128()
|
||||
|
@ -730,7 +745,7 @@ class FileAbi:
|
|||
contract: ContractAbi
|
||||
|
||||
@staticmethod
|
||||
def read_from(reader: BinaryReader):
|
||||
def read_from(reader: BinaryReader | bytes):
|
||||
'''
|
||||
Deserialize 'FileAbi' from 'BinaryReader'.
|
||||
'''
|
||||
|
|
Loading…
Reference in New Issue
Block a user