@dataclass
class UnionType(AbstractType):
types: list[AbstractType]
@classmethod
def from_json(cls, json: Any) -> Optional[UnionType]:
if json["kind"] == cls.__name__:
types = []
for element in json["types"]:
type_ = AbstractType.from_json(element)
if type_ is not None:
types.append(type_)
return UnionType(types)
return None
def to_json(self) -> dict[str, Any]:
type_list = []
for t in self.types:
type_list.append(t.to_json())
return {"kind": self.__class__.__name__, "types": type_list}
def __hash__(self) -> int:
return hash((frozenset(self.types)))