from __future__ import annotations from dataclasses import dataclass from typing import Any, Callable, Optional @dataclass class Object: id: str model: dict @dataclass class Morphism: id: str source: str # Object.id target: str # Object.id contract_name: str contract_version: str payload: dict @dataclass class Functor: id: str name: str transform: Optional[Callable[[dict], dict]] = None def apply(self, data: dict) -> dict: if self.transform: return self.transform(data) return data