import dataclasses
import json
from typing import Any


class ClanJSONEncoder(json.JSONEncoder):
    def default(self, o: Any) -> Any:
        # Check if the object has a to_json method
        if hasattr(o, "to_json") and callable(o.to_json):
            return o.to_json()
        # Check if the object is a dataclass
        elif dataclasses.is_dataclass(o):
            return dataclasses.asdict(o)
        # Otherwise, use the default serialization
        return super().default(o)
