opshin
opshin copied to clipboard
Unions of PlutusData and BuiltinData
Targeting issue #367 The following would now compile
source_code = """
from dataclasses import dataclass
from typing import Dict, List, Union
from pycardano import Datum as Anything, PlutusData
@dataclass()
class A(PlutusData):
CONSTR_ID = 0
foo: int
def validator(x: Union[A, int, bytes, List[int], Dict[int, int]]) -> int:
k: int = 0
if isinstance(x, A):
k = 5
elif isinstance(x, bytes):
k = 7
elif isinstance(x, int):
k = 6
elif isinstance(x, List[int]):
k = 8
elif isinstance(x, Dict[int, int]):
k = 9
return k
"""
I think it can't currently distinguish between Dict[int, int]
and Dict[int, bytes]
for example. I'll work on that if you think this is heading in the correct direction. I also need to sit down and think of what edge cases might break this and write some more tests.