# Wrapper for msgspec with stdlib fallback # # Copyright (C) 2023 Eric Callahan # # This file may be distributed under the terms of the GNU GPLv3 license from __future__ import annotations import os import contextlib from typing import Any, Union, TYPE_CHECKING if TYPE_CHECKING: def dumps(obj: Any) -> bytes: ... # type: ignore # noqa: E704 def loads(data: Union[str, bytes, bytearray]) -> Any: ... # noqa: E704 MSGSPEC_ENABLED = False _msgspc_var = os.getenv("MOONRAKER_ENABLE_MSGSPEC", "y").lower() if _msgspc_var in ["y", "yes", "true"]: with contextlib.suppress(ImportError): import msgspec from msgspec import DecodeError as JSONDecodeError encoder = msgspec.json.Encoder() decoder = msgspec.json.Decoder() dumps = encoder.encode # noqa: F811 loads = decoder.decode # noqa: F811 MSGSPEC_ENABLED = True if not MSGSPEC_ENABLED: import json from json import JSONDecodeError # type: ignore # noqa: F401,F811 loads = json.loads # type: ignore def dumps(obj) -> bytes: # type: ignore # noqa: F811 return json.dumps(obj).encode("utf-8")