opshin icon indicating copy to clipboard operation
opshin copied to clipboard

Unions of PlutusData and BuiltinData

Open SCMusson opened this issue 6 months ago • 3 comments

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.

SCMusson avatar Aug 05 '24 23:08 SCMusson