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