Page MenuHomeSoftware Heritage
Paste P760

Python 3.10 ADT
ActivePublic

Authored by vlorentz on Sep 13 2020, 10:43 AM.
from __future__ import annotations
import dataclasses
import typing
import rust_parser.gll.semantics
@typing.sealed
class Main(metaclass=rust_parser.gll.semantics.ADT):
_variants = ("Foo", "Bar", "Baz")
@dataclasses.dataclass
class Foo:
foo1: str
foo2: str
@dataclasses.dataclass
class Bar:
bar: int
@dataclasses.dataclass
class Baz:
baz: Main
assert issubclass(Main.Foo, Main)
o: Main = Main.Foo(foo1="a", foo2="b")
match o:
case Main.Foo(foo1, foo2):
print(foo1, foo2)
case Main.Bar(_) | Main.Baz(_):
pass