from __future__ import annotations from dataclasses import dataclass from typing import Dict @dataclass class AdapterEntry: name: str version: str contract: dict class GraphOfContracts: def __init__(self) -> None: self._adapters: Dict[str, AdapterEntry] = {} self._contracts: Dict[str, dict] = {} def register_adapter(self, name: str, version: str, contract: dict) -> AdapterEntry: entry = AdapterEntry(name=name, version=version, contract=contract) self._adapters[name] = entry self._contracts[name] = contract return entry def get_adapter(self, name: str) -> AdapterEntry | None: return self._adapters.get(name) def list_adapters(self) -> list[AdapterEntry]: return list(self._adapters.values()) def get_contract(self, name: str) -> dict | None: return self._contracts.get(name)