from types import FunctionType
from typing import Self
import inspect
class Match(type):
def __new__(self: Self, name: str, bases: tuple, namespace: dict[str, any], thing: any):
for member in namespace.values():
if isinstance(member, FunctionType):
signature = inspect.signature(member)
assert len(signature.parameters) == 1, "One parameter expected for a case"
if list(signature.parameters.values())[0].annotation == thing:
return member(thing)