"""JSON abstraction.""" from __future__ import annotations from collections.abc import Callable from typing import Any try: import orjson def dumps( obj: Any, *, default: Callable | None = None, indent: bool = False ) -> str: """Dump JSON.""" return orjson.dumps( obj, option=orjson.OPT_INDENT_2 if indent else None ).decode() loads = orjson.loads except ImportError: import json def dumps( obj: Any, *, default: Callable | None = None, indent: bool = False ) -> str: """Dump JSON.""" # Separators specified for consistency with orjson return json.dumps(obj, separators=(",", ":"), indent=2 if indent else None) loads = json.loads try: from mashumaro.mixins.orjson import DataClassORJSONMixin DataClassJSONMixin = DataClassORJSONMixin except ImportError: from mashumaro.mixins.json import DataClassJSONMixin as JSONMixin DataClassJSONMixin = JSONMixin # type: ignore[assignment, misc]