from dataclasses import dataclass from typing import Any, Dict @dataclass(frozen=True) class Mushroom: name: str rarity: str habitat: str lore: str edible: str = "Unknown" magic: str = "Unknown" danger: str = "Unknown" @classmethod def from_dict(cls, data: Dict[str, Any]) -> "Mushroom": if not isinstance(data, dict): raise TypeError("Mushroom.from_dict expects a dict") required = ["name", "rarity", "habitat", "lore"] missing = [k for k in required if k not in data or data[k] is None] if missing: raise ValueError(f"Mushroom.from_dict missing required fields: {', '.join(missing)}") return cls( name=str(data["name"]), rarity=str(data["rarity"]), habitat=str(data["habitat"]), lore=str(data["lore"]), edible=str(data.get("edible", "Unknown")), magic=str(data.get("magic", "Unknown")), danger=str(data.get("danger", "Unknown")), ) def to_dict(self) -> Dict[str, str]: return { "name": self.name, "rarity": self.rarity, "habitat": self.habitat, "lore": self.lore, "edible": self.edible, "magic": self.magic, "danger": self.danger, }