--- source: /home/ayushjha/.cargo/registry/src/github.com-1ecc6299db9ec823/wasmer-pack-testing-0.6.0/src/autodiscover.rs --- from abc import abstractmethod from dataclasses import dataclass from typing import Any, Callable, Tuple import wasmer # type: ignore try: from typing import Protocol except ImportError: class Protocol: # type: ignore pass def _load(make_view: Callable[[], Any], mem: wasmer.Memory, base: int, offset: int) -> Any: ptr = (base & 0xffffffff) + offset view = make_view() if ptr + view.bytes_per_element > mem.data_size: raise IndexError('out-of-bounds load') view_ptr = ptr // view.bytes_per_element return view[view_ptr] def _decode_utf8(mem: wasmer.Memory, ptr: int, len: int) -> str: ptr = ptr & 0xffffffff len = len & 0xffffffff if ptr + len > mem.data_size: raise IndexError('string out of bounds') view = mem.uint8_view() bytes = bytearray(view[ptr:ptr+len]) x = bytes.decode('utf8') return x def _encode_utf8(val: str, realloc: wasmer.Function, mem: wasmer.Memory) -> Tuple[int, int]: bytes = val.encode('utf8') ptr = realloc(0, 0, 1, len(bytes)) assert(isinstance(ptr, int)) ptr = ptr & 0xffffffff if ptr + len(bytes) > mem.data_size: raise IndexError('string out of bounds') view = mem.uint8_view() view[ptr:ptr+len(bytes)] = bytes return (ptr, len(bytes)) @dataclass class Output: is_valid: bool error_message: str class Polyvalid: instance: wasmer.Instance _canonical_abi_free: wasmer.Function _canonical_abi_realloc: wasmer.Function _is_app_name_valid: wasmer.Function _memory: wasmer.Memory def __init__(self, store: wasmer.Store, imports: dict[str, dict[str, Any]], module: wasmer.Module): self.instance = wasmer.Instance(module, imports) canonical_abi_free = self.instance.exports.__getattribute__('canonical_abi_free') assert(isinstance(canonical_abi_free, wasmer.Function)) self._canonical_abi_free = canonical_abi_free canonical_abi_realloc = self.instance.exports.__getattribute__('canonical_abi_realloc') assert(isinstance(canonical_abi_realloc, wasmer.Function)) self._canonical_abi_realloc = canonical_abi_realloc is_app_name_valid = self.instance.exports.__getattribute__('is-app-name-valid') assert(isinstance(is_app_name_valid, wasmer.Function)) self._is_app_name_valid = is_app_name_valid memory = self.instance.exports.__getattribute__('memory') assert(isinstance(memory, wasmer.Memory)) self._memory = memory def is_app_name_valid(self, name: str) -> 'Output': memory = self._memory; realloc = self._canonical_abi_realloc free = self._canonical_abi_free ptr, len0 = _encode_utf8(name, realloc, memory) ret = self._is_app_name_valid(ptr, len0) assert(isinstance(ret, int)) load = _load(memory.uint8_view, memory, ret, 0) operand = load if operand == 0: boolean = False elif operand == 1: boolean = True else: raise TypeError("invalid variant discriminant for bool") load1 = _load(memory.int32_view, memory, ret, 4) load2 = _load(memory.int32_view, memory, ret, 8) ptr3 = load1 len4 = load2 list = _decode_utf8(memory, ptr3, len4) free(ptr3, len4, 1) return Output(boolean, list)