Add support for AvlTreeIds

This commit is contained in:
Jon Michael Aanes 2025-04-09 21:37:26 +02:00
parent 0dc42bc601
commit fc15e07470

View File

@ -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'.
'''